Разбор JSON в JAVA с помощью GSON

Я пытаюсь разобрать файл JSON с помощью GSON со следующей структурой:

{
  "state": 0,
  "orders": {
    "1": {
      "idOrder": "1564",
      "price": "7.99",
      },
    "3": {
      "idOrder": "4896",
      "price": "9.99",
      },
    "7": {
      "idOrder": "4896",
      "price": "10.99",
      }
  }
}

Я сделал классы одинаковой структурой (с сеттерами и геттерами)

public class myJson {
private int error;
private Orders orders; }

public class Orders {
@SerializedName("1")
private _1 _1;}

public class _1 {
private String idOrder;
private String price;}

и в основном я использую вот так:

       Gson gson = new Gson();
       BufferedReader br = new BufferedReader (new FileReader("base.json"));
       Json jsonOffline = gson.fromJson(br, myJson.class);
       System.out.println("1 - Orderid: " + jsonOffline.getOrders().get1().getidOrder() );

*

And it works perfectly printing: "1 - Orderid: 1564"

*

И теперь моя проблема, что эти числа (1,3,7) в файле JSON случайны и может быть много заказов. Могу ли я указать диапазон чисел, например, 1-1000, и в том случае, если результат не равен нулю, сделать то же самое?

Я имею в виду, чтобы избежать создания 1000 классов, таких как class _1

Вы контролируете, как создается этот JSON? В этом случае не используйте целое число в качестве имени ключа. Что это вообще означает? Почему бы не использовать массив заказов, например orders: [{..}, {..}, {..}], где каждый {..} представляет собой отдельный { "idOrder": ???, "price": ???}?

Pshemo 19.09.2018 22:25

@Pshemo Привет, у меня нет доступа к созданию файла JSON, и это моя проблема, потому что это не массив с [].

Daniel 19.09.2018 22:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Смена приказов на Map (HashMap)

private Map<String, Orders> orders;

И Orders в:

public class Orders {

    private String idOrder;
    private String price;

}

Это должно проанализировать Json, как и ожидалось.

Этот вопрос имеет подход моделирования, но не использует отображение классов в примере

Ответ принят как подходящий

Почему бы не сделать что-то вроде этого:

public class MyJson {
    private int error;
    private Map<String, Order> orders;
    // getters and setters
}

С Order, определенным так:

public class Order {
    private String idOrder;
    private String price;
    // getters and setters
}

А метод main будет выглядеть так:

public static void main(String[] args) throws FileNotFoundException {
    Gson gson = new Gson();
    BufferedReader br = new BufferedReader(new FileReader("base.json"));
    MyJson jsonOffline = gson.fromJson(br, MyJson.class);
    System.out.println("1 - Orderid: " + jsonOffline.getOrders().get("1").getIdOrder());
}

Приятно, спасибо. Итак, я сделал следующие строки кода: for (int i = 1; i <= 10; ++ i) {String j = Integer.toString (i); Объект obj = jsonOffline.getOrders (). Get (j) .getIdOrder (); if (obj == null) {System.out.println ("Заказ" + i + ": не существует"); } else {System.out.println ("IdOrder" + i + ":" + jsonOffline.getOrders (). get (j) .getIdOrder ()); }} Он работает с первым порядком, а затем выдает следующую ошибку: Exception in thread "main" java.lang.NullPointerException

Daniel 19.09.2018 23:32

@Daniel, пожалуйста, замените вторую строку в теле for на: Object obj = jsonOffline.getOrders().get(j);

marme1ad 19.09.2018 23:43

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