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

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个回答

2
感谢朋友的帮助和一些摸索,我找到了一个解决方案。虽然可能不是最优雅的方法,但正是我想要的。
for(Object key: orr.keySet()) {

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

感谢大家的帮助和建议。

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...*/

现在,一旦您将其提取出来,您可以将此数据转换为任何结构,以使从此时起更易于访问。


谢谢,问题是我不知道这些数字470和471会是什么,我只知道它们在这种情况下是因为我已经将它们打印出来了。 非常感谢。 - Mark
感谢朋友的帮助和一些尝试,我找到了一个解决方案。虽然它可能不是最优雅的,但正是我想要的。 - Mark

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

谢谢,我希望避免使用任何其他的库。不过还是谢谢你,我会看一下的。 - Mark

0

你也可以这样做:

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

在需要将整个 JSON 对象放入JSON数组的情况下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接