Я пытаюсь разобрать файл 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
@Pshemo Привет, у меня нет доступа к созданию файла JSON, и это моя проблема, потому что это не массив с [].




Смена приказов на 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, пожалуйста, замените вторую строку в теле for на: Object obj = jsonOffline.getOrders().get(j);
Вы контролируете, как создается этот JSON? В этом случае не используйте целое число в качестве имени ключа. Что это вообще означает? Почему бы не использовать массив заказов, например
orders: [{..}, {..}, {..}], где каждый{..}представляет собой отдельный{ "idOrder": ???, "price": ???}?