将JSONObject转换为List或JSONArray的简单代码?

时间:2012-10-29 14:28:13

标签: java json json-simple

我已经通过各种线程阅读并发现了类似的问题,但在为我的特定问题找到解决方案方面却一直没有成功。

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

返回:

   orr =中的数据   {" 470":[{" locationId":2"量":1,"的productId":1007}],&#34 ; 471":[{" locationId":2"量":1,"的productId":1008}]} ORR' S   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(&#34; 471&#34;),因为我不知道这个号码是什么。< / p>

编辑: 显然我不能回答我自己的问题8小时:

感谢朋友的帮助和一些小小的帮助,我找到了一个解决方案,我确信它不是最有说服力的,但它确实是我所追求的:

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

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

感谢您的帮助和建议。

4 个答案:

答案 0 :(得分:1)

感谢朋友的帮助和一些摆弄,我发现了一个解决方案,我确信它不是最有说服力的,但它正是我所追求的:

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

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

感谢您的帮助和建议。

答案 1 :(得分:0)

响应中的数据类型为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...*/

现在,一旦你把它拉出来,你就可以将这些数据转换成你喜欢的任何结构,从而使这一点更加友好。

答案 2 :(得分:0)

您可以使用提供数据绑定支持的库。 您可以尝试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[]>>() {});

答案 3 :(得分:0)

你也可以这样做:

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

如果要将整个JSON对象放在JSON数组中。