【问题标题】:Json array from JSON response is always nullJSON 响应中的 JSON 数组始终为空
【发布时间】:2018-02-15 12:05:37
【问题描述】:

我正在开发使用 gson 解析 json 响应的 rest 客户端程序。我的json响应如下

{
    "Status": "success",

    "Data": [
        {
            "ID": "123",
            "Type": 0,
            "OperatorID": null,
            "DepartmentID": "128",
            "LanguageCode": "en-US",
            "WebsiteDefID": "160",
            "VisitID": "737",
        },
        {
            "ID": "737867804181437078",
            "Type": 0,
            "OperatorID": "1785",
            "DepartmentID": "200",
            "LanguageCode": "en-US",
            "WebsiteDefID": "160",
            "VisitID": "737",
            "CustomFields": {
                "Model": "ABCD",
                "Question": "ABCD"
            }
        }
    ]
}

格森:

GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson= gsonBuilder.create();
Info info = gson.fromJson(inactiveChatMessages, Info.class);

而我的InfoData Pojo 类如下:

public class Info {
    private String Status;

    private Data[] Data;

    public String getStatus() {
        return Status;
    }
    public void setStatus(String status) {
        Status = status;
    }

    public Data[] getData() {
        return Data;
    }
    public void setData(Data[] data) {
        Data = data;
    }

    @Override
    public String toString() {
        return "ChatInfo [Status=" + Status + ",  Data=" + Arrays.toString(Data) + "]";
    }
}

数据:

public class Data {
    private String ID;
    private String OperatorID;
    private String DepartmentID;


    private CustomFields CustomFields;

    public String getID() {
        return ChatID;
    }
    public void setID(String ID) {
        ChatID = chatID;
    }
    public String getOperatorID() {
        return OperatorID;
    }
    public void setOperatorID(String operatorID) {
        OperatorID = operatorID;
    }
    public String getDepartmentID() {
        return DepartmentID;
    }
    public void setDepartmentID(String departmentID) {
        DepartmentID = departmentID;
    }

    @Override
    public String toString() {
        return "Data [ID=" + ID + ", OperatorID=" + OperatorID + ", DepartmentID=" + DepartmentID + ", CustomFields=" + CustomFields
                + "]";
    }
}

在数组中的Data pojo 中,我只访问我需要的字段。但作为回应,我总是将数据数组设为空。没有错误。所以我真的不知道到底出了什么问题。谁能帮我解决这个问题?

Info [Status=success, Data=[]]

【问题讨论】:

  • 使用jsonschema2pojo.org生成POJO,看来你的POJO对GSON无效,需要@SerializableName("param")注解
  • 我已经试过了。但没有运气
  • 请用jsoneditoronline.org纠正你的杰森一次

标签: java json rest gson jersey-2.0


【解决方案1】:

您的 Json 无效

您的有效 json。

{
    "Status": "success",

    "Data": [{
            "ID": "123",
            "Type": 0,
            "OperatorID": null,
            "DepartmentID": "128",
            "LanguageCode": "en-US",
            "WebsiteDefID": "160",
            "VisitID": "737"

        },
        {
            "ID": "737867804181437078",
            "Type": 0,
            "OperatorID": "1785",
            "DepartmentID": "200",
            "LanguageCode": "en-US",
            "WebsiteDefID": "160",
            "VisitID": "737",
            "CustomFields": {
                "Model": "ABCD",
                "Question": "ABCD"
            }

        }
    ]
}

对于 json 验证,您可以使用 https://jsonlint.com/

否则您的代码可以正常工作。

这里是输出

ChatInfo [Status=success,  Data=[Data [ID=123, OperatorID=null, DepartmentID=128, CustomFields=null], Data [ID=737867804181437078, OperatorID=1785, DepartmentID=200, CustomFields=[Model=ABCD,question=ABCD]]]]

【讨论】:

  • 感谢 Dhiraj 的回复。我正在从我们的客户端访问 Rest URL,它是有效的。这里的问题是即使它在我的本地运行良好。但是当我在 jboss 服务器中部署它时它不起作用。这让我很困惑。
  • 所以当你点击 REST url 时,你会得到 JSON 以上的信息?
  • 是的,在本地环境中我得到了响应,但在 jboss 服务器中,响应始终为空白。我正在使用 Jersey 2 罐子
  • 所以它不是你的 json 问题,它的 rest url 问题。尝试从邮递员那里打你的休息网址
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多