[英]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.