Простой код для преобразования 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...*/

Теперь, когда вы извлекли их, вы можете преобразовать эти данные в любую понравившуюся вам структуру, чтобы сделать ее более удобной для доступа с этого момента.

Другие вопросы по тегам