【问题标题】:Convert returned JSON String to a JSONArray将返回的 JSON 字符串转换为 JSONArray
【发布时间】:2023-03-07 16:39:01
【问题描述】:

我有一个执行数据库查询、将结果集转换为 JSON 字符串并将字符串返回给客户端的 Web 服务。这是转换器的代码(我从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数组w3schools.com/json/json_syntax.asp的语法,返回的字符串格式应该是arr: [{}, {}]
  • 这是我上面显示的返回字符串的格式。我没有发现任何差异。
  • 您缺少“arr”:,而只是字符串中的数组值。
  • 请将“total_rows”更改为“total_columns”。
  • 6ton 我生成了以下形式的字符串: {"Chart":[{"Column1":0.333333,"Column2":"FirmA"} ,{"Column1":0.666667,"Column2" :"FirmB"}]} 但我仍然有确切的问题。

标签: java json web-services


【解决方案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");
    // ...
}

【讨论】:

  • 我认为使用 String 是不正确的,因为 string 可以是任何你需要将数组转换为字符串的东西。
  • 问题中发布的方法返回一个转换为字符串的数组。当我更改我正在使用的 json 库时,我能够从客户端的字符串创建一个数组。对我有用的罐子来自java2s.com/Code/Jar/j/Downloadjavajsonjar.htm
【解决方案2】:

例如,您需要通过这种方式进行操作

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

【讨论】:

    【解决方案3】:

    检查使用的正确库。麻烦的是,IDE 通常建议将org.json.simple 作为 JSONObjectJSONArray 的默认值。

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

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2013-03-30
      • 2011-09-21
      • 2012-04-28
      • 2017-03-14
      • 2013-05-08
      相关资源
      最近更新 更多