【问题标题】:GSON - json to generic objectGSON - json 到通用对象
【发布时间】:2016-01-31 22:53:09
【问题描述】:

我有一个用例,其中 API 将获取 json 中键|值对的通用集合。输入 json 中没有定义的属性。我需要将它映射到一个通用对象并处理数据..

JSON 输入:

"[{ "PostalCode": "345", "Region": "MA", "Enabled": "True" },
  {"PostalCode": "989", "Country": "US", "Enabled": "True" }
]";

我正在使用 GSON 将其反序列化为 java 对象。将其映射到通用对象,例如:

Object obj = new GsonBuilder().create()
                              .fromJson(jsonInput, Object.class);

我得到一个 HashMaps 数组列表的对象 (com.google.gson.internal.LinkedTreeMap)。

从这里我如何获得单独的键和值,如 key = PostalCodevalue = 345

提前感谢您的帮助!

【问题讨论】:

标签: json serialization gson


【解决方案1】:

既然你已经得到了一个com.google.gson.internal.LinkedTreeMap的数组列表,现在你需要迭代这个列表来得到每个键值对:

Object obj = new GsonBuilder().create().fromJson(jsonInput, Object.class);

        List<LinkedTreeMap<Object, Object>> jsonMapList = (List<LinkedTreeMap<Object, Object>>) obj;

        for (LinkedTreeMap<Object, Object> jsonMap : jsonMapList) {

            Set<Entry<Object, Object>> entrySet = jsonMap.entrySet();

            for (Entry<Object, Object> entry : entrySet) {

                System.out.println(entry.getKey() + " " + entry.getValue());
            }

        }

【讨论】:

    【解决方案2】:

    你可以这样做。我已经测试过了。 导入这个

    import com.google.gson.reflect.TypeToken;
    import java.lang.reflect.Type;
    
    Type type = new TypeToken<List<LinkedTreeMap<Object, Object>>>(){}.getType();
    List<Map<Object, Object>> treeMap = newGsonBuilder().create().fromJson(jsonInput,type);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      相关资源
      最近更新 更多