Ale*_*dre 133 java json jackson
这似乎有点不寻常,但我正在寻找一种有效的方法来转换/映射JsonNode到一个POJO.
我将一些Model的信息存储在json文件中,我必须支持我的模型的几个版本.
我所做的是将json文件加载到JsonNode的内存中,应用几个版本控制策略使其与我的Model的最新版本匹配.
ObjectMapper mapper = new ObjectMapper();
BufferedReader fileReader = new BufferedReader(new FileReader(projPath));
JsonNode rootNode = mapper.readTree(fileReader);
//Upgrade our file in memory
applyVersioningStrategy(rootNode);
ProjectModel project = mapJsonNodeToProject(rootNode);
Run Code Online (Sandbox Code Playgroud)
除非有更快的方法,否则我可能最终只需手动应用JsonNodes到我的模型
ice*_*ees 239
在Jackson 2.4中,您可以转换如下:
MyClass newJsonNode = jsonObjectMapper.treeToValue(someJsonNode, MyClass.class);
Run Code Online (Sandbox Code Playgroud)
这里jsonObjectMapper是杰克逊ObjectMapper.
在杰克逊的旧版本中,它会是
MyClass newJsonNode = jsonObjectMapper.readValue(someJsonNode, MyClass.class);
Run Code Online (Sandbox Code Playgroud)
这应该做的伎俩:
mapper.readValue(fileReader, MyClass.class);
Run Code Online (Sandbox Code Playgroud)
我说应该因为我使用的是a String,而不是a,BufferedReader但它应该仍然有用.
这是我的代码:
String inputString = // I grab my string here
MySessionClass sessionObject;
try {
ObjectMapper objectMapper = new ObjectMapper();
sessionObject = objectMapper.readValue(inputString, MySessionClass.class);
Run Code Online (Sandbox Code Playgroud)
以下是该调用的官方文档:http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(java.lang.String,java.lang.Class)
您还可以在实例化以下内容时定义自定义反序列化器ObjectMapper:http:
//wiki.fasterxml.com/JacksonHowToCustomDeserializers
编辑:我只想起别的东西.如果您的对象具有的属性多于POJOhas,并且您只想忽略额外内容,则需要设置此属性:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Run Code Online (Sandbox Code Playgroud)
或者你会收到一个错误,它无法找到要设置的属性.
小智 5
如果您使用的是org.codehaus.jackson,则从1.6开始就可以实现。您可以使用以下代码将JsonNode转换为POJO ObjectMapper#readValue:http : //jackson.codehaus.org/1.9.4/javadoc/org/codehaus/jackson/map/ObjectMapper.html#readValue(org.codehaus.jackson.JsonNode ,java。 lang.Class)
ObjectMapper mapper = new ObjectMapper();
JsonParser jsonParser = mapper.getJsonFactory().createJsonParser("{\"foo\":\"bar\"}");
JsonNode tree = jsonParser.readValueAsTree();
// Do stuff to the tree
mapper.readValue(tree, Foo.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104967 次 |
| 最近记录: |