java - 如何将复杂的 Json 字符串转换为对象?

标签 java json gson

我想将 Json String 转换为 Object 类。我用几个代码尝试了几次,但它给了我一个错误。现在它还为列表提供 null

信息如下

这是我的 Json

    {
    "customer": {
        "msisdn": "123456789",
        "imsi": "0987654321",
        "title": "Mr",
        "firstName": "Bilbo",
        "lastName": "Baggins",
        "dob": "21/10/2006",
        "identificationType": "PP",
        "identificationNumber": "PP12345DC",
        "onBehalfOf": "my_Merchant",
        "purchaseCategoryCode": "Game",
        "accountType": "Postpaid",
        "ownerType": "Paymaster",
        "status": "Confirmed",
        "requestIdentifier": "REQ12345678",
        "responseIdentifier": "RES12345678",
        "address": {
            "line1": "Bag End",
            "line2": "",
            "line3": "",
            "city": "The Shire",
            "country": "Middle Earth"
        },
        "additionalInfo ": [{
            "tag": "creditLimit",
            "value": "2500"
        }, {
            "tag": "creditLimit",
            "value": "2500"
        }],
        "resourceURL": "http://google.com/abc/123"
    }
}

这是我的主类代码

public class TestJsonDemo{
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        String testString="{\r\n" + 
                "   \"customer\": {\r\n" + 
                "       \"msisdn\": \"123456789\",\r\n" + 
                "       \"imsi\": \"0987654321\",\r\n" + 
                "       \"title\": \"Mr\",\r\n" + 
                "       \"firstName\": \"Bilbo\",\r\n" + 
                "       \"lastName\": \"Baggins\",\r\n" + 
                "       \"dob\": \"21/10/2006\",\r\n" + 
                "       \"identificationType\": \"PP\",\r\n" + 
                "       \"identificationNumber\": \"PP12345DC\",\r\n" + 
                "       \"onBehalfOf\": \"my_Merchant\",\r\n" + 
                "       \"purchaseCategoryCode\": \"Game\",\r\n" + 
                "       \"accountType\": \"Postpaid\",\r\n" + 
                "       \"ownerType\": \"Paymaster\",\r\n" + 
                "       \"status\": \"Confirmed\",\r\n" + 
                "       \"requestIdentifier\": \"REQ12345678\",\r\n" + 
                "       \"responseIdentifier\": \"RES12345678\",\r\n" + 
                "       \"address\": {\r\n" + 
                "           \"line1\": \"Bag End\",\r\n" + 
                "           \"line2\": \"\",\r\n" + 
                "           \"line3\": \"\",\r\n" + 
                "           \"city\": \"The Shire\",\r\n" + 
                "           \"country\": \"Middle Earth\"\r\n" + 
                "       },\r\n" + 
                "       \"additionalInfo \": [{\r\n" + 
                "           \"tag\": \"creditLimit\",\r\n" + 
                "           \"value\": \"2500\"\r\n" + 
                "       }, {\r\n" + 
                "           \"tag\": \"creditLimit\",\r\n" + 
                "           \"value\": \"2500\"\r\n" + 
                "       }],\r\n" + 
                "       \"resourceURL\": \"http://google.com/abc/123\"\r\n" + 
                "   }\r\n" + 
                "}";

        Gson gson=new Gson();
        CustomerInfo customerInfo = gson.fromJson(testString, CustomerInfo.class);
        System.out.println(customerInfo);
    }
}

这是我的出处

ClassPojo [customer = ClassPojo [lastName = Baggins, additionalInfo  = null, resourceURL = http://google.com/abc/123, status = Confirmed, msisdn = 123456789, ownerType = Paymaster, identificationType = PP, onBehalfOf = my_Merchant, responseIdentifier = RES12345678, requestIdentifier = REQ12345678, title = Mr, address = ClassPojo [line1 = Bag End, line3 = , country = Middle Earth, city = The Shire, line2 = ], dob = 21/10/2006, purchaseCategoryCode = Game, accountType = Postpaid, imsi = 0987654321, firstName = Bilbo, identificationNumber = PP12345DC]]

但是它的additionalInfo = null :-(

如何解决这个问题?

在这里我也会附加剩余的 POJO 类

谢谢

class CustomerInfo {
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    @Override
    public String toString() {
        return "ClassPojo [customer = " + customer + "]";
    }
}

class Customer {
    private String lastName;

    private AdditionalInfo[] additionalInfo;

    private String resourceURL;

    private String status;

    private String msisdn;

    private String ownerType;

    private String identificationType;

    private String onBehalfOf;

    private String responseIdentifier;

    private String requestIdentifier;

    private String title;

    private Address address;

    private String dob;

    private String purchaseCategoryCode;

    private String accountType;

    private String imsi;

    private String firstName;

    private String identificationNumber;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public AdditionalInfo[] getAdditionalInfo() {
        return additionalInfo;
    }

    public void setAdditionalInfo(AdditionalInfo[] additionalInfo) {
        this.additionalInfo = additionalInfo;
    }

    public String getResourceURL() {
        return resourceURL;
    }

    public void setResourceURL(String resourceURL) {
        this.resourceURL = resourceURL;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMsisdn() {
        return msisdn;
    }

    public void setMsisdn(String msisdn) {
        this.msisdn = msisdn;
    }

    public String getOwnerType() {
        return ownerType;
    }

    public void setOwnerType(String ownerType) {
        this.ownerType = ownerType;
    }

    public String getIdentificationType() {
        return identificationType;
    }

    public void setIdentificationType(String identificationType) {
        this.identificationType = identificationType;
    }

    public String getOnBehalfOf() {
        return onBehalfOf;
    }

    public void setOnBehalfOf(String onBehalfOf) {
        this.onBehalfOf = onBehalfOf;
    }

    public String getResponseIdentifier() {
        return responseIdentifier;
    }

    public void setResponseIdentifier(String responseIdentifier) {
        this.responseIdentifier = responseIdentifier;
    }

    public String getRequestIdentifier() {
        return requestIdentifier;
    }

    public void setRequestIdentifier(String requestIdentifier) {
        this.requestIdentifier = requestIdentifier;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public String getPurchaseCategoryCode() {
        return purchaseCategoryCode;
    }

    public void setPurchaseCategoryCode(String purchaseCategoryCode) {
        this.purchaseCategoryCode = purchaseCategoryCode;
    }

    public String getAccountType() {
        return accountType;
    }

    public void setAccountType(String accountType) {
        this.accountType = accountType;
    }

    public String getImsi() {
        return imsi;
    }

    public void setImsi(String imsi) {
        this.imsi = imsi;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getIdentificationNumber() {
        return identificationNumber;
    }

    public void setIdentificationNumber(String identificationNumber) {
        this.identificationNumber = identificationNumber;
    }

    @Override
    public String toString() {
        return "ClassPojo [lastName = " + lastName + ", additionalInfo  = "
                + additionalInfo + ", resourceURL = " + resourceURL
                + ", status = " + status + ", msisdn = " + msisdn
                + ", ownerType = " + ownerType + ", identificationType = "
                + identificationType + ", onBehalfOf = " + onBehalfOf
                + ", responseIdentifier = " + responseIdentifier
                + ", requestIdentifier = " + requestIdentifier + ", title = "
                + title + ", address = " + address + ", dob = " + dob
                + ", purchaseCategoryCode = " + purchaseCategoryCode
                + ", accountType = " + accountType + ", imsi = " + imsi
                + ", firstName = " + firstName + ", identificationNumber = "
                + identificationNumber + "]";
    }
}

class AdditionalInfo {
    private String tag;

    private String value;

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "ClassPojo [tag = " + tag + ", value = " + value + "]";
    }
}

class Address {
    private String line1;

    private String line3;

    private String country;

    private String city;

    private String line2;

    public String getLine1() {
        return line1;
    }

    public void setLine1(String line1) {
        this.line1 = line1;
    }

    public String getLine3() {
        return line3;
    }

    public void setLine3(String line3) {
        this.line3 = line3;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getLine2() {
        return line2;
    }

    public void setLine2(String line2) {
        this.line2 = line2;
    }

    @Override
    public String toString() {
        return "ClassPojo [line1 = " + line1 + ", line3 = " + line3
                + ", country = " + country + ", city = " + city + ", line2 = "
                + line2 + "]";
    }
}

最佳答案

你的 JSON 文件中有一个小错误,如果你检查你拥有的名称“additionalInfo”和末尾的额外空间,这会导致它失败

"additionalInfo "

改为

"additionalInfo"

关于java - 如何将复杂的 Json 字符串转换为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907851/

相关文章:

java - 在同一场 war 中从另一个 Web 服务调用 Web 服务 - apache cxf

java - FirefoxDriver 截取不同尺寸的屏幕截图

java - 配置spring缓存咖啡因

javascript - 从具有相似键的 JSON 对象中检索数据

java - Gson 不构造内部对象

java - 生成 BigInteger 数字然后相乘。

javascript - 使用 $(document).ready() 函数

ios - 快速解析嵌套的 JSON 属性

java - 如何为 json 字符串编写通用的 getObject() 方法?

java - 将 JSON 字符串序列化为对象