4

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

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 的类型 = 类 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"));
        }

感谢您的帮助和建议。

4

4 回答 4

2

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

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

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

感谢您的帮助和建议。

于 2012-10-30T09:04:12.790 回答
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...*/

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

于 2012-10-29T14:58:11.963 回答
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[]>>() {});
于 2012-10-29T15:01:08.810 回答
0

你也可以这样做:

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

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

于 2014-02-22T13:45:19.487 回答