将Json转换为地图

转换JSON代码的最佳方法是什么?

{ "data" : { "field1" : "value1", "field2" : "value2" } } 

在其中一个键是(field1,field2)的Java Map中,这些字段的值是(value1,value2)。

有任何想法吗? 我应该使用Json-lib吗? 或者更好,如果我写我自己的parsing器? 提前致谢。

我希望你开玩笑说写你自己的parsing器。 🙂

对于这样一个简单的映射,来自http://json.org (java部分)的大多数工具都可以工作。 对于其中的一个(jackson, http://wiki.fasterxml.com/JacksonInFiveMinutes ),你会做:

 HashMap<String,Object> result = new ObjectMapper().readValue(JSON_SOURCE, HashMap.class); 

(其中JSON_SOURCE是一个文件,inputstream,阅读器或JSON内容string)

我喜欢谷歌gson库。
当你不知道JSON的结构。 您可以使用

 JsonElement root = new JsonParser().parse(jsonString); 

然后你可以使用json。 例如如何从你的gson中获得“value1”:

 String value1 = root.getAsJsonObject().get("data").getAsJsonObject().get("field1").getAsString(); 

使用GSON库:

 import com.google.gson.Gson import com.google.common.reflect.TypeToken import java.lang.reclect.Type 

使用下面的代码:

 Type mapType = new TypeToken<Map<String, Map>>(){}.getType(); Map<String, String[]> son = new Gson().fromJson(easyString, mapType); 

使用JSON库例如http://www.json.org/java/

 // Assume you have a Map<String, String> in JSONObject jdata @SuppressWarnings("unchecked") Iterator<String> nameItr = jdata.keys(); Map<String, String> outMap = new HashMap<String, String>(); while(nameItr.hasNext()) { String name = nameItr.next(); outMap.put(name, jdata.getString(name)); } 

我的文章可能会对其他人有所帮助,所以想象一下你的地图上有一个特定的对象,就像这样:

 { "shopping_list":{ "996386":{ "id":996386, "label":"My 1st shopping list", "current":true, "nb_reference":6 }, "888540":{ "id":888540, "label":"My 2nd shopping list", "current":false, "nb_reference":2 } } } 

要用GSON库parsing这个JSON文件,很容易:如果你的项目是maven化的

 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> 

然后使用这个片段:

 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; //Read the JSON file JsonElement root = new JsonParser().parse(new FileReader("/path/to/the/json/file/in/your/file/system.json")); //Get the content of the first map JsonObject object = root.getAsJsonObject().get("shopping_list").getAsJsonObject(); //Iterate over this map Gson gson = new Gson(); for (Entry<String, JsonElement> entry : object.entrySet()) { ShoppingList shoppingList = gson.fromJson(entry.getValue(), ShoppingList.class); System.out.println(shoppingList.getLabel()); } 

相应的POJO应该是这样的:

 public class ShoppingList { int id; String label; boolean current; int nb_reference; //Setters & Getters !!!!! } 

希望它有帮助!

这样它的作品就像一个地图…

 JSONObject fieldsJson = new JSONObject(json); String value = fieldsJson.getString(key); 
 java.lang.reflect.Type mapType = new TypeToken<Map<String, Object>>(){}.getType(); Gson gson = new Gson(); Map<String, Object> categoryicons = gson.fromJson(json, mapType ); 

JsonTools库非常完整。 它可以在Githubfind。

另一个select是json-simple ,可以在Maven Centralfind:

 (JSONObject)JSONValue.parse(someString); //JSONObject is actually a Map. 

工件是24k字节,没有其他运行时依赖关系。

用谷歌的Gson 2.7(也许更早的版本,但我testing了2.7),它是如此简单:

 Map map = gson.fromJson(json, Map.class); 

它返回一个class com.google.gson.internal.LinkedTreeMap的Map,并且对嵌套对象recursion地工作。

我这样做。 这很简单。

 import java.util.Map; import org.json.JSONObject; import com.google.gson.Gson; public class Main { public static void main(String[] args) { JSONObject jsonObj = new JSONObject("{ \"f1\":\"v1\"}"); HashMap<String, String> map = new HashMap<>((Map<String, String>)new Gson().fromJson(jsonObj.toString(),Map.class)); System.out.println(map); } } 

JSON到Map总是会是一个string/对象数据types。 我已经谷歌的GSON lib。

工作得很好,JDK 1.5是最低要求。

下划线库可以将哈希映射或数组列表转换为json和反之 。

代码示例:

 import com.github.underscore.lodash.$; import java.util.*; public class Main { @SuppressWarnings("unchecked") public static void main(String[] args) { String json = "{" + " \"data\" :" + " {" + " \"field1\" : \"value1\"," + " \"field2\" : \"value2\"" + " }" + "}"; Map<String, Object> data = (Map) $.get((Map<String, Object>) $.fromJson(json), "data"); System.out.println(data); // {field1=value1, field2=value2} } } 
 import net.sf.json.JSONObject JSONObject.fromObject(yourJsonString).toMap