簡體   English   中英

如何將 Oracle 數據轉換為 JSON 然后在 JavaScript 中使用?

[英]How to convert Oracle data to JSON and then use in JavaScript?

環境為:Oracle APEX v4.2.2 / DB 為 Oracle 11gR2 / 瀏覽器為:IE11

我目前正在使用 Oracle APEX v4.2.2 開發一個應用程序,我需要在表中獲取數據,並將其轉換為 JSON。 然后我需要獲取這個 JSON 數據並在 JavaScript 中使用它,在我的一個頁面中,我將使用它來生成一個 SVG 圖。

基於以上內容,我如何才能最好地在 Oracle APEX 中滿足上述要求,即:

1) 將基於特定 SQL 標准的 Oracle 表數據轉換為 JSON 的最佳工具/方法?

2) 然后如何在 APEX 頁面中使用此 JSON 數據,以便在 JavaScript 函數中使用?

我想我不確定的主要領域是如何將此表數據轉換為 JSON,然后如何將此 JSON 數據傳遞給 JavaScript 函數。

1) 將基於特定 SQL 標准的 Oracle 表數據轉換為 JSON 的最佳工具/方法?

假設您熟悉 JSON 概念(例如,對象、列表等); 這個PL/JSON庫非常全面,可以將 SQL 轉換為 JSON,反之亦然。

在我處理過的一個案例中,我只需要該庫即可將 JSON 轉換為 SQL 表。 為了將 SQL 轉換為 JSON(將 SQL 表發送到 MongoDB (JSON)),一個簡單的游標對我有用:

FOR i IN (SELECT COL1, COL2,... COLn FROM tab)
LOOP
content := '{"COL1":"'||COL1||'", "COL2":"'||COL2||'", .... "COLN":"'||COLN||'"}';
//do something
END LOOP;

您可以將整個表連接成一個列表[{..}, {...}, ... {..}]並存儲在 CLOB 列中

2) 然后如何在 APEX 頁面中使用此 JSON 數據,以便在 javascript 函數中使用。

因此,JSON 集合現在存儲在您的 CLOB 類型的 SQL 表列中。 您可以將該列的值傳遞給 javaScript 變量。

var text = $v(clob_col);

但由於它存儲為文本,您需要使用語法將其轉換為對象

var obj = JSON.parse(text);

更多關於這里

1) 將基於特定 SQL 標准的 Oracle 表數據轉換為 JSON 的最佳工具/方法?

您是否嘗試過在 Application Express 4.2 中使用 RESTful Web 服務,通過使用它,您可以創建一個基於 pl/sql 或 sql 生成 json 輸出的小型 Web 服務。 然后您可以在您的應用程序或其他應用程序中通過 javascript 使用它。 請查看 oracle 官方文檔“在 Application Express 4.2 中創建和使用 RESTful Web 服務”

2) 然后如何在 APEX 頁面中使用此 JSON 數據,以便在 javascript 函數中使用

通過使用類似於下面的代碼,您可以使用該 Web 服務來在您的應用程序中使用數據

<div id="id01"></div>

<script>
var xmlhttp = new XMLHttpRequest();
var url = "myTutorials.txt or http://www.w3schools.com/json/json_http.asp";

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var myArr = JSON.parse(xmlhttp.responseText);
        myFunction(myArr);
    }
};
xmlhttp.open("GET", url, true);
xmlhttp.send();

function myFunction(arr) {
    var out = "";
    var i;
    for(i = 0; i < arr.length; i++) {
        out += '<a href="' + arr[i].url + '">' + 
        arr[i].display + '</a><br>';
    }
    document.getElementById("id01").innerHTML = out;
}
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM