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

时间:2013-09-26 12:42:28

标签: java android json gson

首先,我是GSON的初学者,所以请耐心等待。

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

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

我成功读取了像“id”,“data”,“uploader”等字符串变量。

但是,我怎样才能阅读contentitems内)?我想得到RTSP链接(content:1),但我的Java一直给我错误,因为我不能用变量命名变量,如:

String 1 = "asd";

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

4 个答案:

答案 0 :(得分:5)

首先需要定义几个类:

<强> MyGson

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

public Data getData() {
    return data;
}
}

数据

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

<强>物品

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

看一下,contentkey是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);
    }

输出:

rtsp://r6---sn-cg07lue6.c.youtube.com/CiILENy73wIaGQl1cubZZSUSXxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

答案 1 :(得分:3)

考虑到content JSON对象如下所示:

"content": {
    "1": "someLink",
    "5": "someOtherLink",
    ...
}

解析该JSON对象的最佳方法是Map(请参阅Map documentation),因此您只需要向Item类添加一个属性,如下所示:

private Map<Integer, String> content;

基本上,地图是包含key - value对的对象,在您的情况下,密钥为Integer,值为String

那么你可以访问你的链接,寻找你要检索的值的键,在第一个链接的情况下,它只是:

String someLink = content.get(new Integer(1));

请注意,这样做可以为链接设置不同的数字。现在你有1,5和6.但你可以有任意整数和任意数量的链接......

答案 2 :(得分:2)

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

要序列化名称仅为Integer的属性,只需使模型类如下:

Json:

{
  "name": "foo",
  "1": "value one",
  "2": "value two",
  "3": "value three"
}

Java:

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...

}

答案 3 :(得分:1)

Java语言不允许这样的变量命名。

此处引用相关的例外情况,详情请参阅以下链接, http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

  

每种编程语言都有自己的一套规则和约定   对于您允许使用的名称和Java   编程语言也不例外。的规则和惯例   命名变量可归纳如下:

     
      
  1. 变量名称区分大小写。变量的名称可以是任何合法标识符 - 无限长度的Unicode字母和序列   数字,以字母开头,美元符号“$”或者   下划线字符“”。然而,该公约始终是开始的   您的变量名称带有字母,而不是“$”或“”。另外,   按照惯例,美元符号字符从未使用过。你可以   找到一些自动生成的名称将包含的情况   美元符号,但您的变量名应始终避免使用它。一个   对于下划线字符存在类似的约定;虽然它是   在技​​术上合法,用“_”开始变量的名称,这个   不鼓励练习。不允许有空格。

  2.   
  3. 后续字符可以是字母,数字,美元符号或下划线字符。公约(和常识)适用于此   规则也是如此。为变量选择名称时,请使用完整的单词   而不是神秘的缩写。这样做可以使您的代码更容易   阅读和理解。在许多情况下,它也会生成您的代码   自记录文件;例如,名为cadence,speed和gear的字段   比缩写版本更直观,例如s,c和   G。另请注意,您选择的名称不得是关键字或   保留字。

  4.   
  5. 如果您选择的名称只包含一个单词,则以全小写字母拼写该单词。如果它由多个单词组成,   大写每个后续单词的第一个字母。名字   gearRatio和currentGear是这个惯例的主要例子。如果   您的变量存储一个常量值,例如static final int   NUM_GEARS = 6,约定略有变化,每个都大写   用下划线字母分隔后续单词。   按照惯例,下划线字符从未在别处使用过。

  6.