使用GSON

时间:2018-09-19 20:17:14

标签: java json parsing gson

我正在尝试使用具有以下结构的GSON解析JSON文件:

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

我把类做成相同的结构(带有setter和getter)

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() );

*

  

它可以完美打印:“ 1-Orderid:1564”

*

现在我的问题是,JSON文件中的这些数字(1、3、7)是随机的,可能有很多订单。 我有什么办法可以指示一个数字范围(例如1-1000),并且在这种情况下,如果结果不为null可以这样做吗?

我的意思是,避免创建1000个类,例如_1类

2 个答案:

答案 0 :(得分:3)

将订单更改为Map(HashMap)

private Map<String, Orders> orders;

然后Orders到:

public class Orders {

    private String idOrder;
    private String price;

}

这应该按预期方式解析Json。

This question有一个类似的方法,但是在示例中未使用类映射

答案 1 :(得分:0)

为什么不做这样的事情:

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