如何将以下 JSON 转换为 Jackson java 中的类
{
"status": 0,
"msg": "0 out of 1 Transactions Fetched Successfully",
"transaction_details": {
"3690": {
"mihpayid": "Not Found",
"status": "Not Found"
}
}
}
transaction_details 中的整数键会导致问题,我们无法控制从第三方支付网关返回的格式。
最佳答案
按照下面的方式设计您的以下类(class),如果没有的话,
import com.fasterxml.jackson.annotation.JsonProperty;
public class Jackson {
private String status;
private String msg;
private TransactionDetails transaction_details = new TransactionDetails();
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public TransactionDetails getTransaction_details() {
return transaction_details;
}
public void setTransaction_details(TransactionDetails transaction_details) {
this.transaction_details = transaction_details;
}
}
class TransactionDetails{
private A3690 a3690;
@JsonProperty("3690")
public A3690 getA3690() {
return a3690;
}
public void setA3690(A3690 a3690) {
this.a3690 = a3690;
}
}
class A3690{
private String mihpayid ;
private String status;
public String getMihpayid() {
return mihpayid;
}
public void setMihpayid(String mihpayid) {
this.mihpayid = mihpayid;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
you can use it likewise, for creating Jackson Object to JSON,
String jsonString = null;
try {
Jackson jacksonObj = new Jackson(); // populate it as per needs...
jsonString = objectMapper.writeValueAsString(jacksonObj);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(jsonString); // will return JSON into String formate.
And for converting String JSON to Jackson Object do likewise,
String str = "{"status":"status","msg":"msg","transaction_details":{"3690":{"mihpayid":"mihpayid","status":"status1"}}}";
try {
Jackson jacksonObject = objectMapper.readValue(str, Jackson.class);
System.out.println(" Status -" + jacksonObject.getStatus() + " : msg - " + jacksonObject.getMsg());
System.out.println(" Mihpayid -" + jacksonObject.getTransaction_details().getA3690().getMihpayid() + " : Status - " + jacksonObject.getTransaction_details().getA3690().getStatus());
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<小时/>
更新:
如果 key 3690未修复,
我的意思是它是随机出现,然后需要重构
Jackson类同样
,(这里只有Jackson类就足够了,
不需要创建更多的类,就像我上面提到的那样)
jackson 公开课{
private String status;
private String msg;
//private TransactionDetails transaction_details = new TransactionDetails();
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
HashMap<String, HashMap<String,String>> transaction_details = new HashMap<String, HashMap<String,String>>();
@JsonProperty("transaction_details")
public HashMap<String, HashMap<String,String>> getMap() {
return transaction_details;
}
public void setMap(HashMap<String, HashMap<String,String>> transaction_details) {
this.transaction_details = transaction_details;
}
}
<小时/>享受,祝你好运......!!!
关于java - Jackson json 序列化对于整数键失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36260879/