【问题标题】:Retrofit - JSON Array Parsing改造 - JSON 数组解析
【发布时间】:2016-04-27 12:06:24
【问题描述】:

我正在使用 Retrofit 解析 JSON Array,其中 JSON 数组如下所示:

"hobbies": [ "Music", "Reading"]

这是我的JSON 的样子:

{
    "type":"success",
    "value":[
        {
            "id":1,
            "title":"Title - 1",
         "name":{
            "first":"First - 1",
            "last":"Last - 1"
         },
            "hobbies":[
                "Writing Code - 1",
            "Listening Music - 1"
            ]
        },
       .....
    ]
}

Value.java

private List<String> hobbies = new ArrayList<String>();

Adapter.java

viewHolder.hobbies.setText(value.getHobbies().toString());

当我运行我的程序时,我是getting data,如下所示:

[Music, Reading]

所以,问题Why我得到[]以及输出。

Value.java

public class Value {

    @SerializedName("id")
    @Expose
    private Integer id;

    @SerializedName("title")
    @Expose
    private String title;

    @SerializedName("hobbies")
    @Expose
    private List<String> hobbies = new ArrayList<String>();

    @SerializedName("name")
    @Expose
    private Name name;

    .....

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }
}

Service.java

public interface Service {

   @GET("/demo_retrofit.json")
   Observable<Master> getMaster();
}

【问题讨论】:

  • 使用jsonschema2pojo.org将你的json转换成pojo
  • @JacksonChengalai 是对的
  • 但我的问题是为什么我在输出中得到 []
  • @Oreo 其实value.getHobbies(); 直接返回一个List[ ]。更好的iterate 它并使用StringBuilder 显示
  • @MD 请把它作为你的答案发布,然后我会接受那个。

标签: java android arrays json retrofit


【解决方案1】:

其实value.getHobbies();直接返回一个List[ ]。更好的iterate 它并使用StringBuilder 显示

【讨论】:

    【解决方案2】:

    MD 和杰克逊是对的。 Object.toString() 方法返回一个“以文本形式表示”该对象的字符串。因此,对于您的情况,爱好是一个数组列表,因此文本表示将带有[]。 ;)

    编辑:

    您可能希望为此使用 for 循环:

    for (String hobby : hobbies) {
        // Do something with hobby here
    }
    

    【讨论】:

    • 谢谢,我已经完成了这个,但很抱歉这次会接受@MD的回答,因为他首先向我展示了获得它的方法.. :) 但我认为你的回答很有用,我也用于每个循环...
    • 尝试使用 StringBuilder,stringBuilder.append(value) 将您的值连接在一起。那么只有你做learningTV.setText(stringBuilder.toString());
    • 你好,伙计。看看这个:stackoverflow.com/questions/35522662/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2021-09-06
    相关资源
    最近更新 更多