【问题标题】:Why am i getting output as null when i try to print cover array?为什么当我尝试打印封面数组时输出为空?
【发布时间】:2019-01-28 20:46:54
【问题描述】:

我正在使用 GSON 解析 JSON 文件,但是当我打印封面数组中的元素时,我得到了 null 作为输出。 我需要coverNamecoverIDbenefitsIncluded

我确信我在某处做了一些愚蠢的事情。请查看相关文件。

request.json

{
"email": "someone@example.com",
"firstName": "someone",
"lastname": "",
"policyNumber": "PHD121213213123Q1",
"premiumAmount": "200.00",
"premiumFrequency": "Monthly",
"cover": [{
        "coverName": "Child Critical Illness",
        "coverID": 10000,
        "benefitsIncluded": [
            "Lump sum payment",
            "No waiting period",
            "Unlimited claim limit per policy owner"
        ]
    },
    {
        "coverName": "Life Coverage",
        "coverID": 10001,
        "benefitsIncluded": [
            "Lump sum benefit should the life insured pass away",
            "Max of 1 Mn per Home Loan",
            "Max 2 Mn per policy Owner",
            "Up to $50k per account for each Credit Card and Personal Loan"
        ]
    },
    {
        "coverName": "Critical Illness",
        "coverID": 10002,
        "benefitsIncluded": [
            "lump sum payment of 12 monthly disability payment",
            "max of 120K per home loan account",
            "max of 50K per credit card and personal loan "
        ]
    }
]
}

Insured.java

public class Insured {
private String email;
private String firstName;
private String lastname;
private String policyNumber;
private String applicationPageLink;
private String premiumAmount;
private String premiumFrequency;
private List<Cover> cover;
//Getters and Setters

Cover.java

public class Cover {
    private String coverName;
    private String coverId;
    private List<String> Benefits;
    //Getters and Setters
}

主要方法

public static void main( String[] args ) throws FileNotFoundException {

    InputStream in = new FileInputStream("json file path");
    BufferedReader buffer=new BufferedReader(new InputStreamReader(in));

    Insured insured = new Gson().fromJson(buffer, Insured.class);

    for (Cover cover : insured.getCover()) {
        System.out.println(cover.getBenefits());
        System.out.println(cover.getCoverId());
    }
}

【问题讨论】:

  • Cover 类中,将字段名称从Benefits 更改为benefitsIncluded

标签: java json list gson


【解决方案1】:

您收到 null 的原因是 GSON 无法将您的 Cover 对象中的字段与 JSON 中的字段匹配,因为属性名称不同(特别是,您有 coverId vs coverIDBenefitsbenefitsIncluded)。

要解决此问题,您有 2 种选择:

  1. 重命名您的 Java 字段,使其与 JSON 中的字段完全匹配,如下所示:

    class Cover {
        private String coverName;
        private String coverID;
        private List<String> benefitsIncluded;
    
        //Getters and Setters
        ...
    }
    

    但是,这个解决方案不是很优雅,因为它可能会让您不遵循 Java 命名约定。

  2. 为每个具有不同名称的字段添加@SerializedName("xxx")注解,其中xxx是JSON中属性的名称,如下所示:

    class Cover {
        private String coverName;
        @SerializedName("coverID")
        private String coverId;
        @SerializedName("benefitsIncluded")
        private List<String> benefits;
    
        //Getters and Setters
        ....
    }
    

    请注意,使用此解决方案时,您不会强制为每个字段添加 @SerializedName 注释,而仅适用于 Java 和 JSON 之间名称不同的字段。

在这两种情况下,您最终都会得到以下输出:

[Lump sum payment, No waiting period, Unlimited claim limit per policy owner]
10000
[Lump sum benefit should the life insured pass away, Max of 1 Mn per Home Loan, Max 2 Mn per policy Owner, Up to $50k per account for each Credit Card and Personal Loan]
10001
[lump sum payment of 12 monthly disability payment, max of 120K per home loan account, max of 50K per credit card and personal loan ]
10002

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多