将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