gpt4 book ai didi

java - java中JSON动态反序列化

转载 作者:行者123 更新时间:2023-12-01 12:27:21 25 4
gpt4 key购买 nike

我的 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,name 是 nme,Employee 是 empl ..

我的问题是:当 json String 和 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 pojo。它主要是使用注释来完成的。如果您不想使用 Jackson,您可以自己编写一些基于反射的代码来执行相同的操作。找到名称和类型与 JSON 匹配的类变量,反之亦然以创建 JSON。

好吧,我刚刚注意到你提到你无法控制 pojo 变量名称。所以我建议使用 Jackson 为 pojo 中的字段添加注释。就像我说的,如果 Jackson 不适合您,您可以创建自己的注释和实用程序代码来执行相同的操作。

编辑1:下面是 Jackson 的代码示例,注意字段名称和 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

关于java - java中JSON动态反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26214508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com