java - gson 的 json 和包装器

标签 java json gson jira

我正在尝试从 Jira 获取一些 Actor 。包装器的代码在 Gson.fromJson 调用中使用。我使用了类似的 json 字符串,其中没有包含我需要的信息的数组,并且工作正常,所以问题似乎与数组有关,但我不是 100% 确定:

import com.google.gson.annotations.SerializedName;

public class JiraRoleJsonWrapper {
    @SerializedName("self")
    private String self;
    @SerializedName("name")
    private String name;
    @SerializedName("id")
    private int id;
    @SerializedName("description")
    private String description;
    @SerializedName("actors")
    private JiraActors[] actors;

    public JiraActors[] getActors() {
        return actors;
    }
    public void setActors(JiraActors[] actors) {
        this.actors = actors;
    }

    public String getSelf() {
        return self;
    }

    public void setSelf(String self) {
        this.self = self;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String key) {
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /*
    public String[] getAvatarUrls() {
        return avatarUrls;
    }

    public void setAvatarUrls(String[] avatarUrls) {
        this.avatarUrls = avatarUrls;
    }
    */
}

class JiraActors {
    @SerializedName("id")
    private int id;
    @SerializedName("displayNme")
    private String displayName;
    @SerializedName("type")
    private String type;
    @SerializedName("name")
    private String name;
    //@SerializedName("avatarUrl")
    //private String avatarUrl;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

} 

它将收到的 json:

{
    "self":"http://someserver.com:8080/apps/jira/rest/api/2/project/10741/role/10002",
"name":"Administrators",
"id":10002,
"description":"A project role",
"actors":[
    {
        "id":12432,
        "displayName":"Joe Smith",
        "type":"atlassian-user-role-actor",
        "name":"joesmi",
        "avatarUrl":"/apps/jira/secure/useravatar?size=xsmall&ownerId=dawsmi&avatarId=12245"
    },
    {
        "id":12612,
        "displayName":"Smurfette Desdemona",
        "type":"atlassian-user-role-actor",
        "name":"smudes",
        "avatarUrl":"/apps/jira/secure/useravatar?size=xsmall&ownerId=lamade&avatarId=10100"
    },

这显示了两个参与者和 json 的格式。请注意,我没有放置完整的 json 响应。它只显示了两个 Actor 。

在我的代码中,我尝试了以下方法来检索 Actor :

InputStream is = response.getEntityInputStream();
                Reader reader = new InputStreamReader(is);
                Gson gson = new Gson();

                JiraRoleJsonWrapper[] jiraRoleJsonWrapper = gson.fromJson(reader, JiraRoleJsonWrapper[].class);
                for (JiraRoleJsonWrapper w : jiraRoleJsonWrapper) {
                    JiraActors[] a = w.getActors();
                    String name = a.getName();

由于某种原因,它没有找到 getName。我不知道为什么。

最佳答案

我明白了。

我将 setActors 更改为

public void setActors(ArrayList<JiraActors> actors) {
    this.actors = actors;
}

然后我就能够获取数组列表并访问 JiraActors 的 getName() 方法。

关于java - gson 的 json 和包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659612/

相关文章:

java - 导入类时,带有 Gson 的嵌套对象返回 null

java - 使用 SMTP 和 Apache Camel 向自己发送电子邮件

java - 从代码创建方法

json - 如何完整获取冗长的字符串环境变量?

json - 提交AWS Batch作业时出现CannotStartContainerError

java - 无法从 Jersey 响应中获取正确的 json 值

json - 暴露: How to parse JSON into an Entity class

java - 将文件写入内部存储时崩溃

java - 担心在登录中使用 JSoup 时缺少属性

java - 为什么我会收到 gson 异常 : Expecting object found?