当前位置: 代码迷 >> java >> 使用 GSON 将动态字段反序列化为 POJO
  详细解决方案

使用 GSON 将动态字段反序列化为 POJO

热度:115   发布时间:2023-07-17 20:48:26.0

我尝试了很多方法,但没有成功使用 Gson 库将此 Json 解析为 Java 对象:

 "return":{  
      "48388":{  
         "status":"canceled",
         "operations":{  

         },
         "created":"138232386",
         "price":"12.50000",
         "volume":"50.00000000",
         "pair":"btc_brl",
         "type":"buy"
      },
      "51714":{  
         "status":"canceled",
         "operations":{  

         },
         "created":"1365465421706",
         "price":"1500.00000",
         "volume":"0.10000000",
         "pair":"btc_brl",
         "type":"buy"
      }, 
      "48754":{  
         "status":"canceled",
         "operations":{  

         },
         "created":"1383237058",
         "price":"600.00000",
         "volume":"0.50000000",
         "pair":"btc_brl",
         "type":"buy"
      }
      "success":1
}

有很多关于此的主题,但没有一个涵盖这种类型的 json 映射。 我相信有一种简单的方法可以做到这一点,有什么想法吗? 谢谢!

编辑:我正在尝试这个:

public class Test {
    @SerializedName("return")
    public Return1 _return;
}

public class Return {
    public List<Map<String, Order>> order;
}

编辑:

public class Order {
    @SerializedName("id")
    private int idOrder;
    private String status;
    private String created;
    private String price;
    private String volume;
    private String pair;
    private String type;
    private List<Operations> operations;
    // All the gets and sets here..
}

Gson 没有初始化我的订单对象。 订单对象始终为空。 我找不到实现此映射的正确方法。

经过长时间的战斗,我能够使用此解决方案解决:

public void deserialize() {

Gson gson = new Gson();

// For isr read InputStreamReader
Map<String, Object> map =  gson.fromJson(isr, Map.class);

System.out.println(map.get("success"));
Map<String, Object> map2 = (Map<String, Object>) map.get("return");

// Show the contents of return
System.out.println(map2); 

}

之后,我使用了一个 Entry 对象来迭代并设置 Order 的值。

谢谢!

  相关解决方案