json - 将 JSON 解析为 Java bean - 列表剩余为空

标签 json gson

我正在尝试使用 GSON 将一些 JSON 解析为 Java 对象。我的 json 在这里:http://ec2-50-112-212-186.us-west-2.compute.amazonaws.com/ske.json

下面是我的 Java bean。我在 JsonGen 的帮助下创建了它:

package ske.entities;

import java.util.List;

public class WordSketch{

    private List<Gramrels> gramrels;
    private String corp_full_name;

    public String getCorp_full_name() {
        return corp_full_name;
    }
    public void setCorp_full_name(String corp_full_name) {
        this.corp_full_name = corp_full_name;
    }
    public List<Gramrels> getGramrels(){
        return this.gramrels;
    }
    public void setGramrels(List<Gramrels> gramrels){
        this.gramrels = gramrels;
    }

    public static class Gramrels {

        private List<Words> words;
        private Number count;
        private String name;
        private Number score;
        private Number seek;

        public List<Words> getWords(){
            return this.words;
        }
        public void setWords(List<Words> words){
            this.words = words;
        }
        public Number getCount(){
            return this.count;
        }
        public void setCount(Number count){
            this.count = count;
        }
        public String getName(){
            return this.name;
        }
        public void setName(String name){
            this.name = name;
        }
        public Number getScore(){
            return this.score;
        }
        public void setScore(Number score){
            this.score = score;
        }
        public Number getSeek(){
            return this.seek;
        }
        public void setSeek(Number seek){
            this.seek = seek;
        }
    }

    public static class Words {
        private Number count;
        private Number id;
        private String lempos;
        private Number score;
        private Number seek;
        private String word;

        public Number getCount(){
            return this.count;
        }
        public void setCount(Number count){
            this.count = count;
        }
        public Number getId(){
            return this.id;
        }
        public void setId(Number id){
            this.id = id;
        }
        public String getLempos(){
            return this.lempos;
        }
        public void setLempos(String lempos){
            this.lempos = lempos;
        }
        public Number getScore(){
            return this.score;
        }
        public void setScore(Number score){
            this.score = score;
        }
        public Number getSeek(){
            return this.seek;
        }
        public void setSeek(Number seek){
            this.seek = seek;
        }
        public String getWord(){
            return this.word;
        }
        public void setWord(String word){
            this.word = word;
        }
    }
}

但是,当我调用 WordSketch gramrels = gson.fromJson(new InputStreamReader(response.getEntity().getContent()), WordSketch.class); 时,corp_full_name已填充,但 gramrels 为空。我究竟做错了什么?

这是我第一次使用 Json,所以我对它还很陌生。

谢谢

最佳答案

我认为你的问题只是字段的名称。

在您的类中,名称为“gramrels”,但在您的 JSON 响应中,名称为“Gramrels”(大写)。程序中的变量名称和 JSON 中的变量名称必须相同,因为 GSON 允许您仅从 JSON 响应中获取您感兴趣的那些字段...因此,如果它在响应中找到 JSON 值,则不会与您的任何类属性都不对应,GSON 只是忽略该值。

我建议你使用注解@SerializedName,这样:

@SerializedName("Gramrels")
private List<Gramrels> gramrels;

通过这种方式,您可以按照 Java 命名约定将属性名称保留为小写,但您要告诉 GSON JSON 响应中此参数的名称将对应于“Gramrels”...

您也可以对其他变量执行相同的操作,例如:

@SerializedName("corp_full_name")
private String corpFullName;

因为corp_full_name不遵循Java命名约定...

关于json - 将 JSON 解析为 Java bean - 列表剩余为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937047/

相关文章:

java - 当我尝试打印封面数组时,为什么我的输出为空?

php - 将字符串数组发送到 php

ios - 获取 AFNetworking 响应的结果作为 JSON 字符串数组

java - 需要一个字符串,但结果是 BEGIN_OBJECT 我必须返回字符串

java.lang.UnsupportedOperationException : JsonObject - Not sure why

android - kotlin 数据类和 SerializedName

java - Gson 从 JSON 到 HashMap<Integer, MyObject> 其中 Integer 位于 JSON 对象内部

java - birt 报告中的嵌套循环

database - 家谱:关联数据库中的家庭关系

python - 将 JSON 转换为 Python 字典会将双引号替换为单引号,并在每个双引号开头实例之前添加 "u"