我需要从不基于标准对象的数据库JSON文档中撤回。
是否有办法使用JAVA将这些文档“反序列化”为Lists&原始对象的字典(string,int,bool等)
任何可以双向执行此操作的库? 换句话说,我正在寻找System.Runtime.Serialization.Json
的Java计数器部分答案 0 :(得分:6)
http://json.org/几乎每个Java库都可以做到这一点,你真的尝试过找点什么吗?
例如,您可以使用Jackson:
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> map = mapper.readValue(json, Map.class);
但创建自己的Java对象来映射通常很方便;没有必要使用标准对象。例如:
public class MyType {
public String name;
public int age;
// and so on
public Date createTime;
}
MyType instance = mapper.readValue(json, MyType.class);
有关更多示例,您可以查看Jackson tutorial。
答案 1 :(得分:5)
我建议使用一个可以将JSON解析为树模型的库,而不是试图强制使用JSON成为难以使用的Map<String, Object>
或List<Object>
。虽然许多图书馆可以做这类事情,Google Gson是我最喜欢的。您可以使用其JsonParser
类将JSON解析为以根JsonElement开头的树。获得JsonElement
之后,使用Object
可能比List
Map
更容易使用JsonElement e = new JsonParser().parse(someJson);
if (e.isJsonObject()) {
// JsonObject has many of the same methods as a Map
JsonObject obj = e.getAsJsonObject();
String foo = obj.get("foo").getAsString();
int bar = obj.get("bar").getAsInt();
} else if (e.isJsonArray()) {
JsonArray array = e.getAsJsonArray();
// JsonArray implements Iterable and can be used a lot like a List
for (JsonElement element : array) {
...
}
}
。
{{1}}
使用这些对象也很容易构建JSON树。
答案 2 :(得分:1)
Flexjson肯定会这样做。下面的行将jsonString反序列化为HashMap
Map<String, String> map = new flexjson.JSONDeserializer().deserialize(jsonString);
答案 3 :(得分:-3)
很抱歉,JSON没有关于数据类型的任何元信息,因此除了字符串列表之外,没有机会根据标准对象转换任何内容。
更新:我可以考虑用未归类的JSON-String制作带有Groovy的POGO。然后,您还可以使用动态对象。也许你也可以使用http://json-lib.sourceforge.net/。