2017-12-02 292 views
0

我有这样的代码:访问JSON数组(JAVA)的2维

String sURL = "https://example.com/json"; //just a string 
// Connect to the URL using java's native library 
URL url = new URL(sURL); 
HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
request.connect(); 

// Convert to a JSON object to print data 
JsonParser jp = new JsonParser(); //from gson 
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element 
JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object. 
String names = rootobj.get("names").getAsString(); 
System.out.println(names); 

我如何可以访问该阵列的第二级在倒数第二行? “名称”是第一个工作正常的维度。
在PHP中的解决方案将是

$var = json[...][...] //for accessing the second dimension. 

这是如何在Java中做了什么?像rootobj.get(“名称/姓氏”)不起作用。

+1

你能告诉什么样的JSON看起来像 – bhspencer

+0

当然一个例子!像这样一个这里:https://api.github.com/users/mralexgray/repos 在第一行它说“0” - >“ID” 我如何访问ID? –

+0

删除'getAsString()',并将这些名称当作一个新对象 –

回答

0

根据你的代码,我假设你使用GSON进行JSON处理。如果你的JSON元素是一个数组,你可以简单地使用get(index)来访问它的元素。草绘在这里:

//Not taking care of possible null values here 
JsonObject rootobj = ... 
JsonElement elem = rootobj.get("names"); 
if (elem.isJsonArray()) { 
    JsonArray elemArray = elem.getAsJsonArray(); 

    JsonElement innerElem = elemArray.get(0); 
    if (innerElem.isJsonArray()) { 
     JsonArray innerArray = innerElem.getAsJsonArray(); 
     //Now you can access the elements using get(..) 
     //E.g. innerArray.get(2); 
    } 
} 

当然这不是很好看。您还可以查看JsonPath,它简化了浏览到JSON文档中的特定部分。

更新: 在您提到的文档中,您想要精确地提取哪个值?数组元素的id值(根据您的评论之一)?这可能是这样做的this这里举例:

JsonElement root = jp.parse.... 
JsonArray rootArray = root.getAsJsonArray(); //Without check whether it is really an array 
//By the following you would extract the id 6104546 
//Access an other array position if you want the second etc. element 
System.out.println(rootArray.get(0).getAsJsonObject().get("id")); 

否则请你想要什么更详细的解释(你贴不与JSON例子匹配你的代码参考)。

+0

我不知道你是否因为我的文章更新而收到更新。因此,我更新了我的文章,评论。 – MDDCoder25

0

在你的Github链接中,你的根元素是一个数组,而不是一个对象。 (而且也没有names属性)

所以你需要

root.getAsJsonArray(); 

那么你会遍历数组的长度,并使用get(i),访问特定对象。

从该对象,请使用其他方法获取访问它的一个属性