Простой код для преобразования JSONObject в список или JSONArray?
Я прочитал различные темы и нашел похожие проблемы, но мне не удалось найти решение для моей конкретной проблемы.
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}],"471":[{"locationId":2,"количество":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"));
}
Спасибо за помощь и предложения, ребята.
4 ответа
Благодаря помощи друга и некоторой тряске я нашел решение, я уверен, что оно не самое красноречивое, но это именно то, чего я добился:
for(Object key: orr.keySet()) {
JSONArray orderOne = (JSONArray)orr.get(key);
JSONObject ordervalue = (JSONObject)orderOne.get(0);
System.out.println(ordervalue.get("productId"));
}
Спасибо за помощь и предложения, ребята.
Вы можете использовать библиотеку, обеспечивающую поддержку привязки данных. Вы можете попробовать 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[]>>() {});
Вы также можете сделать:
JSONArray jsonArr = new JSONArray();
jsonArr.put(jsonObj);
в случае, если вы хотите поместить весь объект JSON в массив JSON.
Данные в вашем ответе имеют тип 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...*/
Теперь, когда вы извлекли их, вы можете преобразовать эти данные в любую понравившуюся вам структуру, чтобы сделать ее более удобной для доступа с этого момента.