将返回的JSON字符串转换为JSONArray

时间:2015-01-08 15:02:44

标签: java json web-services

我有一个执行数据库查询的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);

但是出现以下错误:不兼容的类型:String无法转换为Map。我究竟做错了什么?感谢。

3 个答案:

答案 0 :(得分:1)

显然问题出在我使用的json库上。一旦我使用了

import org.json.JSONArray;
这一切都很顺利。我能够使用

将返回的字符串转换为数组
JSONArray arr = new JSONArray(JSON_STRING);

并迭代这些值我使用了这个答案中提供的代码:Accessing members of items in a JSONArray with Java我为了简单起见在这里重现:

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

答案 1 :(得分:0)

你需要通过这种方式来做到这一点,例如

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();
        }
    }

答案 2 :(得分:0)

检查使用的库。问题是IDE org.json.simple经常被建议为 JSONObject JSONArray 的默认值。

您可以在上面的org.json库中找到最新jar的链接。