java - Jackson json 序列化对于整数键失败

标签 java json jackson

如何将以下 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/

相关文章:

java - onLocationChanged 不起作用?

java - 为什么在 Java 7 中没有正确设置文件写入权限?

java - Volley 将每个请求存储在应用程序缓存中

json - 如何使用 Go 将具有不同类型的一个元素的数组编码为 JSON?

java - 我应该如何读取带有编号对象的 JSON?

java - 是否可以告诉编译器一个方法总是抛出一个异常

java - 为什么输出是(Nan,Nan)?

javascript - 南加州大学谷歌地图ajax + json

json - 即使添加了对象映射器,Jackson 也无法检测到 JAXB 注释

json - 如何从 JAXB 注释类生成 JSON 模式?