0
class Result {
  private List orders;// Holds objects of class Object only.
  private Number a;
  private Number b;
}

class Order {
  private Number oid;
  private Number status;
}

public class TestClass {
public static void main(String... args){
    String testString = "{\"orders\":[{\"oid\":\"347\",\"status\":\"1\"},{\"oid\":\"348\",\"status\":\"1\"}],\"a\":14.15,\"b\":0}";
    Gson gson = new GsonBuilder().create(); 
    Result res = gson.fromJson( testString, Result.class );
}

类结果不能修改。Json 没有列表的类型信息,Json 无法解析。

  1. 假设我们不能更改这些类,将如何解决这个问题?考虑可能存在多个不同类型的此类列表的情况。
  2. 如果列表包含多种类型的对象怎么办?
4

1 回答 1

1

解析 JSON 时,您希望它具有一定的结构。例如,您希望 Result 对象包含 Orders 而不是字符串或其他内容。所以解析器必须足够智能,才能弄清楚列表中可以包含哪些类型的对象。除非您对集合进行参数化,否则无法知道这一点。相信所有 java 泛型信息在编译时都会被删除。这不是真的。例如,Gson 使用泛型来确定如何解析特定的列表值。因此,如果您使用的是 GSon 解析器并且List<Order>不同的列表类型没有问题。

处理不同的列表项类是另一回事。如果您可以更改 Json 数据,那么对于每个列表项,您可以对类名及其字段进行编码。如果您绝对无法更改数据类,则必须恢复将 json 解释为分层键值对的集合并自己进行反序列化。

可能这个线程会有所帮助

于 2012-06-26T12:05:33.110 回答