【问题标题】:Parsing JSON in JAVA with GSON使用 GSON 在 JAVA 中解析 JSON
【发布时间】:2018-09-19 20:17:14
【问题描述】:

我正在尝试使用具有以下结构的 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

【问题讨论】:

  • 您能控制这个 JSON 的创建方式吗?在这种情况下,不要使用整数作为键名。这甚至代表什么?为什么不使用像orders: [{..}, {..}, {..}] 这样的订单数组,其中每个{..} 代表单独的{ "idOrder": ???, "price": ???}
  • @Pshemo 嗨,我无权创建 JSON 文件,这是我的问题,因为它不是带有 [] 的数组。

标签: java json parsing gson


【解决方案1】:

更改订单为Map (HashMap)

private Map<String, Orders> orders;

Orders 到:

public class Orders {

    private String idOrder;
    private String price;

}

这应该会按预期解析 Json。

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

【讨论】:

    【解决方案2】:

    为什么不这样做:

    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
    • @Daniel,请将for 正文中的第二行替换为:Object obj = jsonOffline.getOrders().get(j);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2011-07-26
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多