2013-09-26 91 views
1

首先,我是GSON的初学者,请耐心等待。如何阅读使用数字作为名称的JSON变量,使用GSON

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

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

我成功了念想 “ID”, “数据”, “上传” 的字符串变量等

然而,我如何阅读contentitems)?我想要得到的RTSP链接(content:1),但我的Java不断给我的错误,因为我不能命名与编号的变量,如:

String 1 = "asd"; 

任何帮助表示赞赏,感谢您的帮助

+1

你可以发布你的JSON吗? – thegiga

+0

您可以创建'Map '或'Map ',发布的答案 –

回答

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

看一看,你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); 
    } 

输出:

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

+1为彻底性 –

+0

非常感谢您的帮助:D –

1

的Java languge不允许像这样的变量命名。

一个相关exceprt在此引用,请参阅下面的详细信息的链接, http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html

每个编程语言都有它自己的一套规则和惯例 为你被允许的各种名义使用和Java编程语言也不例外。为 命名变量的规则和约定可以概括如下:

  1. 变量名称是区分大小写的。变量的名称可以是任何合法标识符 - 一个无限长的Unicode字母序列和 数字,以字母开头,美元符号“$”或 下划线字符“”。但是,该公约始终要用字母“0”或“”开始 变量名称。此外,按照惯例,美元符号字符根本不会被使用。您可能会在 找到一些自动生成的名称将包含 美元符号的情况,但您的变量名称应始终避免使用它。 A 下划线字符存在类似的约定;而在技术上合法的是 以“_”开始变量的名称,这种做法是不鼓励的。不允许使用空格。

  2. 后续字符可能是字母,数字,美元符号或下划线字符。公约(和常识)也适用于此规则。为变量选择名称时,请使用完整单词 而不是隐含的缩写。这样做会使您的代码更容易阅读和理解 。在很多情况下,它也会使您的代码 自行记录;字段名为节奏,速度和齿轮,例如, 比缩写版本更直观,如s,c和 g。另请注意,您选择的名称不得是关键字或 保留字。

  3. 如果您选择的名称只包含一个单词,则拼写该单词的全部小写字母。如果它包含多个单词,则 将每个后续单词的首字母大写。 gearRatio和currentGear的名称是这个约定的主要例子。如果 您的变量存储了一个常量值,例如static final int NUM_GEARS = 6,则约定略有变化,大写每个 字母并将后续单词与下划线字符分隔开来。 按照惯例,下划线字符在别处不会使用。

+1

它不是我所要求的,但无论如何感谢:D –

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.但你可以有任何整数和任意数量的链接...

+0

再次,非常感谢解释:D –

相关问题