Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用多级数组遍历Gson对象_Java_Android_Json_Gson - Fatal编程技术网

Java 如何使用多级数组遍历Gson对象

Java 如何使用多级数组遍历Gson对象,java,android,json,gson,Java,Android,Json,Gson,我正在尝试使用Gson库获取jSonitems>item>image>transparent中的参数。其想法是捕获透明、透明_blank和透明_dark。但我不知道如何获得这些值,目前我已经创建了以下内容: Json { "date_layout":"day-month-year", "lastupdate":1547596830, "items":[{ "name":"Cleans Cuts", "featured":"true", "it

我正在尝试使用Gson库获取jSon
items>item>image>transparent
中的参数。其想法是捕获
透明
透明_blank
透明_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"
             }
          }
    }]
}
.main活动

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);
              }
}

您还必须创建以下类来获取透明、透明\u blank和透明\u 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 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方法获得该值

您还必须创建以下类来获取transparent、transparent\u blank和transparent\u 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 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方法获得该值

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;
}`
您还需要创建一个图像类,如下所示:

`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);
}`
`datosdatosfinal=gson.fromJson(response_jSon,Datos.class);

对于(int i=0;ijson不是很干净,我建议您修改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;
}`
您还需要创建一个图像类,如下所示:

`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);
}`
`datosdatosfinal=gson.fromJson(response_jSon,Datos.class);
对于(int i=0;i您必须使用

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;
}
您可以使用必须使用的

来生成pojo

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;
}

您可以通过使用自动生成普通旧Java对象来生成pojo