为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过具有多个级别数组的 Gson 对象

如何通过具有多个级别数组的 Gson 对象

拉丁的传说 2022-05-12 18:24:27
我正在尝试使用Gson库获取json中的参数。 这个想法是捕捉和。但我不知道如何获得这些值,目前我创建了以下内容: items>item>image>images>transparenttransparenttransparent_blanktransparent_darkjson{   "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"             }          }    }]}。主要活动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 的类对象达托斯.javapublic class Datos {    public String date_layout;    public Int lastupdate;     List<items> items;}项目.javapublic class items {    public String name;}
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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 并使其更易于维护。


查看完整回答
反对 回复 2022-05-12
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

你必须使用


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


查看完整回答
反对 回复 2022-05-12
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您还必须创建以下类以获得透明、透明空白和透明暗的价值


Images.java

项目.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 方法获取值。


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号