[英]JSON dynamic deserialization in java
我来自服务器的Json休养处如下所示
{
"duration": 0,
"taskSummaries": [
{
"name": null,
"id": 151,
"priority": 0,
"content": "{\"Comment\":\"Employee:{name}\",\"TaskName\":\"employeeForm\",\"GroupId\":\"HR\",\"NodeName\":\"Employee Form\"}",
"processId": "demoProject1.busiProce1",
"description": null,
"subject": null,
"statusMessage": "Ready",
"itemID": "com.demo.tp15:demoProject1:1.0",
"potentialOwners": [
{
"name": "mary",
"type": "USER"
}
],
"skippable": true,
"actualOwner": null,
"createdBy": null,
"createdOn": null,
"activationTime": 1412582092211,
"processInstanceId": 172,
"processSessionId": 0,
"quickTaskSummary": null,
"parentId": null
}
],
"statusMessage": "200",
"itemID": null,
"processInstanceId": 172,
"startURL": null,
"processAppID": "demoProject1.busiProce1",
"processAppName": null,
"processState": {
"description": "Active",
"code": 1
},
"dueDate": null,
"startDt": null,
"endDt": null,
"parentProcessInstanceId": 0,
"outcome": null,
"identity": null,
"processVersion": null,
"processName": null,
"externalId": null
}
而且我也无法控制我的pojo / model对象...按照我的编码标准,我必须遵循命名约定,例如taskSummaries将是tskSumris,名称是nme,Employee是empl ..
我的问题是:当json字符串和pojo中的名称不匹配时,我想将我的Json字符串动态分配给我的pojo / model。
我知道(实际上我也这样做过)如果我的名字匹配,那么我可以做这样的事情
private Object getDynamicObject(String jsonString,Class class1) throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
Object dynamicObject = null;
dynamicObject = mapper.readValue(jsonString, class1);
return dynamicObject;
}
你们能帮我吗?
试用Jackson-> http://jackson.codehaus.org/。它有一堆库,可帮助您动态(反)序列化JSON和Java pojos。 它主要使用注释来完成。 如果您不希望杰克逊的话,您可以自己编写一些基于反射的代码来执行相同的操作。 找到具有与JSON匹配的名称和类型的类变量,然后以与之相反的方式创建JSON。
好的,我刚刚注意到您提到您无法控制pojo变量名称。 因此,我建议您使用Jackson,在其中向pojo中的字段添加注释。 就像我说的那样,如果杰克逊不是您的选择,则可以创建自己的注释和实用程序代码来执行相同的操作。
编辑1:这是杰克逊的代码示例,请注意,字段名称和Json属性名称不必相同。
import java.io.StringWriter;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
public class Test
{
@JsonProperty(value="employeeName")
private String empName;
@JsonProperty(value="employeeAge")
private int age;
public static void main(String[] args) throws Exception
{
Test t = new Test();
t.empName = "arun";
t.age = 100;
ObjectMapper m = new ObjectMapper();
StringWriter w = new StringWriter();
m.writeValue(w, t);
w.close();
String json = w.getBuffer().toString();
System.out.println(json);
Test t1 = m.readValue(json, Test.class);
System.out.println(t1.empName);
System.out.println(t1.age);
}
}
控制台输出如下所示:
{"employeeName":"arun","employeeAge":100}
arun
100
您是直接从Pojo Model Class生成Json吗? 我要做的事情类似于我获取数据,然后使用bean映射器将其映射到新的Pojo。 并且新映射器中的每个元素都将具有XMLElement标记,以转换为相应的Json / XML。 然后,我们使用Jackson进行转换并将其作为输出提供。 所以最后我有两个Pojos,一个用于Hibernate,另一个用于映射到Json。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.