如何遍历具有多个级别数组的Gson对象

时间:2019-01-18 12:09:51

标签: java android json gson

我正在尝试使用 Gson 库在 jSon items>item>image>images>transparent中获取参数。这个想法是捕获transparenttransparent_blanktransparent_dark。但是我不知道如何获得这些值,目前我已经创建了以下内容:

Json

{ 
  "date_layout":"day-month-year",
  "lastupdate":1547596830,
    "items":[{
      "name":"Cleans Cuts",
      "featured":"true",
      "item":{
        "image":"http:www.domain.com/unwanted_image.jpg",
           "images":{
              "transparent":"http:www.domain.com/desired_image1.jpg",
              "transparent_blank":"http:www.domain.com/desired_image2.jpg",
              "transparent_dark":"http:www.domain.com/desired_image3.jpg"
             }
          }
    },
    {
      "name":"Cleans Cuts",
      "featured":"true",
      "item":{
        "image":"http:www.domain.com/unwanted_image.jpg",
           "images":{
              "transparent":"http:www.domain.com/desired_image1.jpg",
              "transparent_blank":"http:www.domain.com/desired_image2.jpg",
              "transparent_dark":"http:www.domain.com/desired_image3.jpg"
             }
          }
    }]
}

.MainActivity

public class MainActivity extends AppCompatActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

String url = "http://www.example.com/file.json";

Request request = new Request.Builder()
       .url(url)
       .build();

Response response = client.newCall(request).execute();
       if(response.isSuccessful()){
          String response_jSon = response.body().string();
          Gson gson = new Gson();
          Datos datosFinal = gson.fromJson(response_jSon, Datos.class);
              for (int i=0; i<datosFinal.items.size(); i++){
                Log.d("msg_2", datosFinal.items.get(i).name);
              }
}

而且我只能进入.MainActivity日志中看到的项目。

Json的类对象

Datos.java

public class Datos {
    public String date_layout;
    public Int lastupdate;
     List<items> items;
}

items.java

public class items {
    public String name;
}

3 个答案:

答案 0 :(得分:1)

您还必须创建以下类,以获取透明,transparent_blank和transparent_dark的价值

Images.java
Item.java

替换此类:

public class Items{

private Item item;

private String name;

private String featured;

public Item getItem ()
{
    return item;
}

public void setItem (Item item)
{
    this.item = item;
}

public String getName ()
{
    return name;
}

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

public String getFeatured ()
{
    return featured;
}

public void setFeatured (String featured)
{
    this.featured = featured;
}


}

添加此类:

public class Images{

private String transparent_blank;

private String transparent_dark;

private String transparent;

public String getTransparent_blank ()
{
    return transparent_blank;
}

public void setTransparent_blank (String transparent_blank)
{
    this.transparent_blank = transparent_blank;
}

public String getTransparent_dark ()
{
    return transparent_dark;
}

public void setTransparent_dark (String transparent_dark)
{
    this.transparent_dark = transparent_dark;
}

public String getTransparent ()
{
    return transparent;
}

public void setTransparent (String transparent)
{
    this.transparent = transparent;
}

}

此外,添加此类:

public class Item {

private Images images;

private String image;

public Images getImages ()
{
    return images;
}

public void setImages (Images images)
{
    this.images = images;
}

public String getImage ()
{
    return image;
}

public void setImage (String image)
{
    this.image = image;
}
}    

现在,您将使用getter方法获取值。

答案 1 :(得分:1)

json不太干净,我建议您重新制作此json字符串的生成方式,但是如果您仍想在不修改json的情况下实现获取这些值,则需要更改 Items 上课:

`public class items {
    public String name;
    public String featured;
    public Item item;
}` 

然后,您需要创建另一个名为 Item

的类
`public class Item{
    public String image;
    public Image images;
}`

您还需要创建一个 Image 类,如下所示:

`public class Image {
    public String transparent;
    public String transparent_blank;
    public String transparent_dark;
}`

然后,您可以在循环中记录以下值:

`Datos datosFinal = gson.fromJson(response_jSon, Datos.class);
 for (int i=0; i<datosFinal.items.size(); i++){
        Log.d("msg_2", datosFinal.items.get(i).item.images.transparent);
        Log.d("msg_2", datosFinal.items.get(i).item.images.transparent_blank);
        Log.d("msg_2", datosFinal.items.get(i).item.images.transparent_dark);
}`

虽然这可能有效,但我强烈建议您重新制作json并使其易于维护。

答案 2 :(得分:1)

您必须使用

public class items {
    public String name;
    @Expose(serialize = false, deserialize = false)
    public String featured;
    @Expose(serialize = false, deserialize = false)
    public item mItem;
}

public class item {
    @Expose(serialize = false, deserialize = false)
    public String image;
    @Expose(serialize = false, deserialize = false)
    public images mImages;
}

public class images {
    @Expose(serialize = false, deserialize = false)
    public String transparent;
    @Expose(serialize = false, deserialize = false)
    public String transparent_blank;
    @Expose(serialize = false, deserialize = false)
    public String transparent_dark;
}

您可以使用http://www.jsonschema2pojo.org/

生成pojo