如何使用GSON读取使用数字作为其名称的JSON变量

Bla*_*ama 1 java android json gson

首先,我是GSON的初学者,请耐心等待.

我试图从这个网址读取一个JSON:

https://gdata.youtube.com/feeds/api/videos?author=radityadika&v=2&alt=jsonc

我成功读取了一个String变量,如"id","data","uploader"等.

但是,我怎么读content(里面items)?我想得到RTSP链接(content:1),但我的Java一直给我错误,因为我不能用变量命名变量,如:

String 1 = "asd";
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,感谢您的帮助

Isk*_*ske 6

它很旧,但也许有人仍然需要它......

要序列化名称只是 Integer 的属性,只需创建模型类,如:

杰森:

{
  "name": "foo",
  "1": "value one",
  "2": "value two",
  "3": "value three"
}
Run Code Online (Sandbox Code Playgroud)

爪哇:

import com.google.gson.annotations.SerializedName;

public class Foo {

   private String name;

   @SerializedName("1")
   private String one;

   @SerializedName("2")
   private String two;

   @SerializedName("3")
   private String three;

   // standard getter & setters bellow...

}
Run Code Online (Sandbox Code Playgroud)


Max*_*tin 5

您首先需要定义几个类:

MyGson

public class MyGson {
private String apiVersion;
private Data data;

public Data getData() {
    return data;
}
}
Run Code Online (Sandbox Code Playgroud)

数据

public class Data {
private String updated;
private int totalItems = 0;
private int startIndex = 0;
private int itemsPerPage = 0;
private  List<Item> items;

public List<Item> getItems() {
    return items;
}
}
Run Code Online (Sandbox Code Playgroud)

项目

 public class Item {
private String id;
private String uploaded;
private String updated;
private String uploader;
private String category;
private String title;
private String description;
private Map<Integer, String>  content;

public Map<Integer, String> getContent() {
    return content;
}
}
Run Code Online (Sandbox Code Playgroud)

看看,你content的地图key是1,2,3,4,5,6 ....

您可以定义,Map<String, String> content但因为您的所有键都是整数..

所以现在你可以提取你想要的任何值:

发射台

 ....
 Gson gson = new Gson();

    MyGson myGson = gson.fromJson(str, MyGson.class);

    List<Item> items = myGson.getData().getItems();

    if(items.size()>0){
        Item item = items.get(0);

        String myStr = item.getContent().get(1);

        System.out.println(myStr);
    }
Run Code Online (Sandbox Code Playgroud)

输出:

rtsp://r6---sn-cg07lue6.c.youtube.com/CiILENy73wIaGQl1cubZZSUSXxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Run Code Online (Sandbox Code Playgroud)