2016-01-31 25 views
0

我有一个用例,API将获取json中的Key | Value对的泛型集合。输入json中没有定义的属性。我需要把它映射到一个通用的对象和处理数据..GSON - 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); 

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

从这里我怎么得到个人的关键和值像key = PostalCode & value = 345

在此先感谢您的帮助!

+0

还研究https://github.com/google/gson/blob/master/UserGuide.md#TOC-Serializing-and-Deserializing-Generic-Types –

回答

0

正如你已经得到了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()); 
      } 

     } 
+0

谢谢..这个工作! – Kiran

0

你可以做到这样。我已经测试过它。 进口此

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