簡體   English   中英

將返回的JSON字符串轉換為JSONArray

[英]Convert returned JSON String to a JSONArray

我有一個執行數據庫查詢的Web服務,將結果集轉換為JSON字符串並將串行返回給客戶端。 這是轉換器的代碼(我從http://biercoff.com/nice-and-simple-converter-of-java-resultset-into-jsonarray-or-xml/獲得了它):

public static String convertToJSON(ResultSet resultSet)
        throws Exception {
    JSONArray jsonArray = new JSONArray();
    while (resultSet.next()) {
        int total_rows = resultSet.getMetaData().getColumnCount();
        JSONObject obj = new JSONObject();
        for (int i = 0; i < total_rows; i++) {
            obj.put(resultSet.getMetaData().getColumnLabel(i + 1)
                    .toLowerCase(), resultSet.getObject(i + 1));
        }
        jsonArray.add(obj);
    }
    return jsonArray.toJSONString();
}

在客戶端應用程序中,當我打印返回的字符串時,它采用以下格式:

[{"Column1":0.333333,"Column2":"FirmA"},{"Column1":0.666667,"Column2":"FirmB"}]

到目前為止一切都很好。 我遇到的問題是將返回的字符串轉換為JSON數組。 我試過這個:

JSONArray arr = new JSONArray(JSON_STRING);

但得到以下錯誤消息:類JSONArray中的構造函數JSONArray不能應用於給定的類型。 我試着先轉換成JSON對象,如下所示:

JSONObject obj = new JSONObject(JSON_STRING);

但得到以下錯誤:不兼容的類型:字符串無法轉換為Map。 我究竟做錯了什么? 謝謝。

顯然問題出在我使用的json庫上。 一旦我使用了

import org.json.JSONArray;

一切都很順利。 我能夠使用返回的字符串轉換為數組

JSONArray arr = new JSONArray(JSON_STRING);

並迭代值我使用了本答案中提供的代碼: 使用Java訪問JSONArray中的項目成員,為簡單起見,我在此重現:

for (int i = 0; i < arr.length(); ++i) {
    JSONObject rec = arr.getJSONObject(i);
    int id = rec.getInt("id");
    String loc = rec.getString("loc");
    // ...
}

那么你需要通過這種方式來做到這一點

String jsonText = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
        try {

            JSONArray array = new JSONArray(jsonText);
            System.out.println(array);
            System.out.println(array.length());

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

檢查使用的庫。 混亂是IDE通常建議將org.json.simple作為JSONObjectJSONArray的默認值。

你可以找到上面org.json庫的最新jar的鏈接。

暫無
暫無

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

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