【问题标题】:Simple code for converting JSONObject to a List or JSONArray?将 JSONObject 转换为 List 或 JSONArray 的简单代码?
【发布时间】:2012-10-29 14:28:13
【问题描述】:

我已经阅读了各种线程并发现了类似的问题,但在为我的特定问题找到解决方案方面非常不成功。

JSONObject orr = (JSONObject)orderRows.get("orderRows");
System.out.println("data in orr = " + orr + "orr's type = " + orr.getClass());

返回:

orr 中的数据 = {"470":[{"locationId":2,"quantity":1,"productId":1007}],"471":[{"locationId":2,"quantity":1,"productId":1008 }]}orr 的 type = class org.json.simple.JSONObject

我正在尝试将此数据放入一个数组/列表/任何我可以使用键 470,471 来检索数据的地方。

任何建议或指点非常感谢非常感谢...

澄清一下:

JSONObject orr = (JSONObject)orderRows.get("orderRows");
        JSONArray orderOne = (JSONArray)orr.get("471");
        System.out.println(orderOne);
        System.out.println(orderOne.get(0));
        JSONObject orderOneKey = (JSONObject)orderOne.get(0);
        System.out.println(orderOneKey.get("productId"));

这就是我所追求的,但显然我不能做 orr.get("471") 因为我不知道这个数字是多少。

编辑: 显然我无法在 8 小时内回答我自己的问题:

感谢朋友的帮助和一些摆弄,我找到了一个解决方案,我敢肯定这不是最有说服力的,但这正是我所追求的:

for(Object key: orr.keySet()) {

                JSONArray orderOne = (JSONArray)orr.get(key);
                JSONObject ordervalue = (JSONObject)orderOne.get(0);
                System.out.println(ordervalue.get("productId"));
        }

感谢大家的帮助和建议。

【问题讨论】:

    标签: java json json-simple


    【解决方案1】:

    感谢朋友的帮助和一些摆弄,我找到了一个解决方案,我敢肯定这不是最有说服力的,但这正是我所追求的:

    for(Object key: orr.keySet()) {
    
                    JSONArray orderOne = (JSONArray)orr.get(key);
                    JSONObject ordervalue = (JSONObject)orderOne.get(0);
                    System.out.println(ordervalue.get("productId"));
            }
    

    感谢大家的帮助和建议。

    【讨论】:

      【解决方案2】:

      您的响应中的数据是 JSONObject 类型的(请参阅花括号 {})。所以顶层对象有两个“字段”,470和471。这些字段返回的数据都是数组。这些数组每个只有一个项目,它们都是对象。所以这里是一个获取数据的例子:

      JSONObject jsonObject = (JSONObject)orderRows.get("orderRows");
      JSONArray firstArray = jsonObject.getJSONArray("470");
      JSONArray secondArray = jsonObject.getJSONArray("471");
      JSONObject firstObject = firstArray.get(0);
      int locationId = firstObject.getId("locationId");
      /*...etc...*/
      

      现在,一旦您将其取出,您就可以将这些数据转换为您喜欢的任何结构,以便从现在开始更易于访问。

      【讨论】:

      • 谢谢,问题是我不知道这些数字 470 和 471 是什么,在这种情况下我知道它们是因为我已经打印出来了。非常感谢
      • 感谢朋友的帮助和一些摆弄,我找到了一个解决方案,我敢肯定这不是最有说服力的,但这正是我所追求的:
      【解决方案3】:

      您可以使用提供数据绑定支持的库。 你可以试试 Genson http://code.google.com/p/genson/,它速度快、易于使用并且有几个不错的功能。这是您的问题的示例:

      // first define a class matching your json
      class Product {
        private int locationId;
        private int quantity;
        private int productid;
      
        // setter & getters
      }
      
      // then use genson
      Map<String, Product[]> productsMap = new Genson().deserialize(jsonStream, new GenericType<Map<String, Product[]>>() {});
      

      【讨论】:

      • 谢谢,我希望避免使用任何其他库。不过我会看看谢谢。
      【解决方案4】:

      你也可以这样做:

      JSONArray jsonArr = new JSONArray();
      jsonArr.put(jsonObj);
      

      如果您想将整个 JSON 对象放入 JSON 数组中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-05
        • 2020-11-30
        • 2019-08-17
        • 2011-11-03
        • 2018-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多