Does anyone knows a java library that could easily encode java Maps into json objects and the other way around?
有没有人知道可以将java映射轻松编码为json对象的java库?
UPDATE
更新
For reasons couldn't explain ( and I hate sometimes ) I can't use generics on my environment.
由于种种原因,我无法解释(有时我讨厌)我不能在我的环境中使用泛型。
What' I'm trying to do is to have something like this:
我想做的是有这样的东西:
Map a = new HashMap();
a.put( "name", "Oscar" );
Map b = new HashMap();
b.put( "name", "MyBoss");
a.put( "boss", b ) ;
List list = new ArrayList();
list.add( a );
list.add( b );
String json = toJson( list );
// and create the json:
/*
[
{
"name":"Oscar",
"boss":{
"name":"MyBoss"
}
},
{
"name":"MyBoss"
}
]
*/
And be able to have it again as a list of maps
并且可以把它作为一张地图的列表。
List aList = ( List ) fromJson( jsonStirng );
6 个解决方案
#1
14
JSON-Simple looks relatively easy to use (examples below).
JSON-Simple看起来相对容易使用(示例如下)。
Map to JSON:
映射到JSON:
Map map = new HashMap();
map.put("name", "foo");
map.put("nickname", "bar");
String jsonText = JSONValue.toJSONString(map);
JSON to List/Map:
JSON /地图列表:
String s = yourJsonString;
List list = (JSONArray) JSONValue.parse(s);
Map map = (JSONObject) list.get(0);
#2
33
You can use Google Gson for that. It has excellent support for Generic types.
你可以用谷歌Gson。它对泛型类型有很好的支持。
Here's an SSCCE:
这里有一个SSCCE:
package com.*.q2496494;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Test {
public static void main(String... args) {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Gson gson = new Gson();
// Serialize.
String json = gson.toJson(map);
System.out.println(json); // {"key1":"value1","key2":"value2","key3":"value3"}
// Deserialize.
Map<String, String> map2 = gson.fromJson(json, new TypeToken<Map<String, String>>() {}.getType());
System.out.println(map2); // {key1=value1, key2=value2, key3=value3}
}
}
#3
4
You can view the site from Json.org for the list of good JSON libraries in Java.
您可以从Json.org查看该站点,以获得Java中优秀的JSON库列表。
JSon.org's own implementation JSONObject
can do just that. From their JavaDoC
JSon.org自己的实现JSONObject可以做到这一点。从他们的JavaDoC
/**
* Construct a JSONObject from a Map.
*
* @param map A map object that can be used to initialize the contents of
* the JSONObject.
*/
public JSONObject(Map map);
you can do
你可以做
JSONObject json = new JSONObject(map);
To convert JSON String back to object....
JSON字符串转换回对象....
String jsonString = "{\"name\" : \"some name\", \"age\" : 10}";
JSONObject json = new JSONObject(jsonString);
and you can access values like:
您可以访问如下值:
int age = json.getInt("age");
Constructor JavaDoC
构造函数JavaDoC
Construct a JSONObject from a source JSON text string. This is the most commonly used JSONObject constructor.
从源JSON文本字符串构造JSONObject。这是最常用的JSONObject构造函数。
Parameters: source A string beginning with
{
(left brace) and ending with}
(right brace).参数:以{(左括号)和}(右括号)开头的字符串。
#4
3
I guess the real question would be which JSON library (from org.json's page) would NOT allow doing this. As far as I know every single library there would allow this in some form. So every library mentioned so far works.
我想真正的问题是哪个JSON库(来自org)。不允许这样做。据我所知,那里的每一个图书馆都会以某种形式允许这样做。到目前为止,所有提到的图书馆都是有效的。
And to add some information, Jackson works very well with all kinds of data including basic Maps and Lists:
为了补充一些信息,Jackson非常擅长处理各种数据,包括基本的地图和列表:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValue(list);
List listOfMaps = mapper.readValue(json, List.class);
which would handle this particular case. While generic type information can be used, it is optional when using "natural" binding to JDK container types.
它会处理这个特殊的情况。虽然可以使用泛型类型信息,但是在使用“自然”绑定到JDK容器类型时是可选的。
#5
1
We use http://json-lib.sourceforge.net/ in our project, it works just fine.
我们在项目中使用http://json-lib.sourceforge.net/,它运行良好。
#6
0
When using google gson.
当使用谷歌gson。
var getRowData =
[{
"dayOfWeek": "Sun",
"date": "11-Mar-2012",
"los": "1",
"specialEvent": "",
"lrv": "0"
},
{
"dayOfWeek": "Mon",
"date": "",
"los": "2",
"specialEvent": "",
"lrv": "0.16"
}];
JsonElement root = new JsonParser().parse(request.getParameter("getRowData"));
JsonArray jsonArray = root.getAsJsonArray();
JsonObject jsonObject1 = jsonArray.get(0).getAsJsonObject();
String dayOfWeek = jsonObject1.get("dayOfWeek").toString();
// when using jackson
/ /当使用杰克逊
JsonFactory f = new JsonFactory();
ObjectMapper mapper = new ObjectMapper();
JsonParser jp = f.createJsonParser(getRowData);
// advance stream to START_ARRAY first:
jp.nextToken();
// and then each time, advance to opening START_OBJECT
while (jp.nextToken() == JsonToken.START_OBJECT) {
Map<String,Object> userData = mapper.readValue(jp, Map.class);
userData.get("dayOfWeek");
// process
// after binding, stream points to closing END_OBJECT
}
#1
14
JSON-Simple looks relatively easy to use (examples below).
JSON-Simple看起来相对容易使用(示例如下)。
Map to JSON:
映射到JSON:
Map map = new HashMap();
map.put("name", "foo");
map.put("nickname", "bar");
String jsonText = JSONValue.toJSONString(map);
JSON to List/Map:
JSON /地图列表:
String s = yourJsonString;
List list = (JSONArray) JSONValue.parse(s);
Map map = (JSONObject) list.get(0);
#2
33
You can use Google Gson for that. It has excellent support for Generic types.
你可以用谷歌Gson。它对泛型类型有很好的支持。
Here's an SSCCE:
这里有一个SSCCE:
package com.*.q2496494;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class Test {
public static void main(String... args) {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Gson gson = new Gson();
// Serialize.
String json = gson.toJson(map);
System.out.println(json); // {"key1":"value1","key2":"value2","key3":"value3"}
// Deserialize.
Map<String, String> map2 = gson.fromJson(json, new TypeToken<Map<String, String>>() {}.getType());
System.out.println(map2); // {key1=value1, key2=value2, key3=value3}
}
}
#3
4
You can view the site from Json.org for the list of good JSON libraries in Java.
您可以从Json.org查看该站点,以获得Java中优秀的JSON库列表。
JSon.org's own implementation JSONObject
can do just that. From their JavaDoC
JSon.org自己的实现JSONObject可以做到这一点。从他们的JavaDoC
/**
* Construct a JSONObject from a Map.
*
* @param map A map object that can be used to initialize the contents of
* the JSONObject.
*/
public JSONObject(Map map);
you can do
你可以做
JSONObject json = new JSONObject(map);
To convert JSON String back to object....
JSON字符串转换回对象....
String jsonString = "{\"name\" : \"some name\", \"age\" : 10}";
JSONObject json = new JSONObject(jsonString);
and you can access values like:
您可以访问如下值:
int age = json.getInt("age");
Constructor JavaDoC
构造函数JavaDoC
Construct a JSONObject from a source JSON text string. This is the most commonly used JSONObject constructor.
从源JSON文本字符串构造JSONObject。这是最常用的JSONObject构造函数。
Parameters: source A string beginning with
{
(left brace) and ending with}
(right brace).参数:以{(左括号)和}(右括号)开头的字符串。
#4
3
I guess the real question would be which JSON library (from org.json's page) would NOT allow doing this. As far as I know every single library there would allow this in some form. So every library mentioned so far works.
我想真正的问题是哪个JSON库(来自org)。不允许这样做。据我所知,那里的每一个图书馆都会以某种形式允许这样做。到目前为止,所有提到的图书馆都是有效的。
And to add some information, Jackson works very well with all kinds of data including basic Maps and Lists:
为了补充一些信息,Jackson非常擅长处理各种数据,包括基本的地图和列表:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValue(list);
List listOfMaps = mapper.readValue(json, List.class);
which would handle this particular case. While generic type information can be used, it is optional when using "natural" binding to JDK container types.
它会处理这个特殊的情况。虽然可以使用泛型类型信息,但是在使用“自然”绑定到JDK容器类型时是可选的。
#5
1
We use http://json-lib.sourceforge.net/ in our project, it works just fine.
我们在项目中使用http://json-lib.sourceforge.net/,它运行良好。
#6
0
When using google gson.
当使用谷歌gson。
var getRowData =
[{
"dayOfWeek": "Sun",
"date": "11-Mar-2012",
"los": "1",
"specialEvent": "",
"lrv": "0"
},
{
"dayOfWeek": "Mon",
"date": "",
"los": "2",
"specialEvent": "",
"lrv": "0.16"
}];
JsonElement root = new JsonParser().parse(request.getParameter("getRowData"));
JsonArray jsonArray = root.getAsJsonArray();
JsonObject jsonObject1 = jsonArray.get(0).getAsJsonObject();
String dayOfWeek = jsonObject1.get("dayOfWeek").toString();
// when using jackson
/ /当使用杰克逊
JsonFactory f = new JsonFactory();
ObjectMapper mapper = new ObjectMapper();
JsonParser jp = f.createJsonParser(getRowData);
// advance stream to START_ARRAY first:
jp.nextToken();
// and then each time, advance to opening START_OBJECT
while (jp.nextToken() == JsonToken.START_OBJECT) {
Map<String,Object> userData = mapper.readValue(jp, Map.class);
userData.get("dayOfWeek");
// process
// after binding, stream points to closing END_OBJECT
}