在 JSONArray 中访问内部数组的值
Accessing the inner array's values in a JSONArray
我正在使用 IntelliJ 和 Gooks Books API,我在 Java 中编码,同时使用 json 简单。我正在编写一个程序,用户可以在终端中输入书名和 API returns 5 本书以及每本书的信息。 API return 有很多关于书籍的信息,但我只想要 return 书名、作者和出版商。我刚开始使用 API 和 JSON,所以我不知道我的错误是语法错误还是逻辑错误。
例如,我输入哈利波特,这是 API returns
的一部分
{
"kind": "books#volumes",
"totalItems": 1832,
"items": [
{
"kind": "books#volume",
"id": "cvRFvgAACAAJ",
"etag": "mfbVxWEkveo",
"selfLink": "https://www.googleapis.com/books/v1/volumes/cvRFvgAACAAJ",
"volumeInfo": {
"title": "Harry Potter and the Cursed Child",
"subtitle": "Parts one and two",
"authors": [
"Jack Thorne",
"J. K. Rowling",
"John Tiffany"
],
"publisher": "THORNDIKE Press",
"publishedDate": "2016",
"description": "\"Thorndike Press large print the literacy bridge.\"",
"industryIdentifiers": [
{
"type": "ISBN_10",
"identifier": "1410496201"
},
{
"type": "ISBN_13",
"identifier": "9781410496201"
}
],
"readingModes": {
"text": false,
"image": false
},
"pageCount": 407,
"printType": "BOOK",
"categories": [
"Good and evil"
],
我了解到,检索特定信息的方法之一是创建一个 JSON 数组,并将来自 API 的信息设为 JSON 对象。我成功地解析了数据,因此每个 JSON 对象都是一本书及其所有信息,但我不知道如何只打印出我想要的特定信息。
这是我的一些代码。从 TODO 开始的代码是我遇到问题的地方
String inline = ""; //gets the JSON data and makes it a String
Scanner sc = new Scanner(url.openStream()); //reads JSON data
while (sc.hasNext())
{
inline += sc.nextLine();
}
sc.close();
JSONParser parse = new JSONParser();
JSONObject jObj = (JSONObject)parse.parse(inline);
JSONArray theJArray = (JSONArray)jObj.get("items");
for (int i = 0; i < theJArray.size(); i++)
{
JSONObject secondJObj = (JSONObject)theJArray.get(i);
System.out.println("The secondJobj: " + secondJObj); //one object is one book and its info
JSONArray specificArr = (JSONArray)secondJObj.get("author"); //TODO
System.out.println("The specificArr is: " + specificArr); //returns null
System.out.println("The specific section: " + secondJObj.get("author")); //returns null
}
根据我的理解,所有内容都在 "items" 数组下,因此 "authors" 数组是另一个数组中的一个数组。如何访问 "authors" 数组中的信息?
我还需要书名和出版商,我知道它们不是数组,因此它不同于从 "authors" 数组中调用信息。如何从 "items" 数组中检索键值 "title" 和 "publisher" 的信息?
我可以在上面的代码中看到你的努力,但是 author
在 volumeInfo
JsonObject
里面
"volumeInfo": {
"title": "Harry Potter and the Cursed Child",
"subtitle": "Parts one and two",
"authors": [
"Jack Thorne",
"J. K. Rowling",
"John Tiffany"
],
所以在for循环中首先你需要得到volumeInfo
作为JSONObject
然后得到author
作为JSONArray
for (int i = 0; i < theJArray.size(); i++)
{
JSONObject secondJObj = (JSONObject)theJArray.get(i);
System.out.println("The secondJobj: " + secondJObj); //one object is one book and its info
JSONObject volInfo = (JSONObject)secondJObj.get("volumeInfo"); //TODO
// then get author
JSONArray specificArr = (JSONArray)volInfo.get("author");
}
我正在使用 IntelliJ 和 Gooks Books API,我在 Java 中编码,同时使用 json 简单。我正在编写一个程序,用户可以在终端中输入书名和 API returns 5 本书以及每本书的信息。 API return 有很多关于书籍的信息,但我只想要 return 书名、作者和出版商。我刚开始使用 API 和 JSON,所以我不知道我的错误是语法错误还是逻辑错误。
例如,我输入哈利波特,这是 API returns
的一部分{
"kind": "books#volumes",
"totalItems": 1832,
"items": [
{
"kind": "books#volume",
"id": "cvRFvgAACAAJ",
"etag": "mfbVxWEkveo",
"selfLink": "https://www.googleapis.com/books/v1/volumes/cvRFvgAACAAJ",
"volumeInfo": {
"title": "Harry Potter and the Cursed Child",
"subtitle": "Parts one and two",
"authors": [
"Jack Thorne",
"J. K. Rowling",
"John Tiffany"
],
"publisher": "THORNDIKE Press",
"publishedDate": "2016",
"description": "\"Thorndike Press large print the literacy bridge.\"",
"industryIdentifiers": [
{
"type": "ISBN_10",
"identifier": "1410496201"
},
{
"type": "ISBN_13",
"identifier": "9781410496201"
}
],
"readingModes": {
"text": false,
"image": false
},
"pageCount": 407,
"printType": "BOOK",
"categories": [
"Good and evil"
],
我了解到,检索特定信息的方法之一是创建一个 JSON 数组,并将来自 API 的信息设为 JSON 对象。我成功地解析了数据,因此每个 JSON 对象都是一本书及其所有信息,但我不知道如何只打印出我想要的特定信息。
这是我的一些代码。从 TODO 开始的代码是我遇到问题的地方
String inline = ""; //gets the JSON data and makes it a String
Scanner sc = new Scanner(url.openStream()); //reads JSON data
while (sc.hasNext())
{
inline += sc.nextLine();
}
sc.close();
JSONParser parse = new JSONParser();
JSONObject jObj = (JSONObject)parse.parse(inline);
JSONArray theJArray = (JSONArray)jObj.get("items");
for (int i = 0; i < theJArray.size(); i++)
{
JSONObject secondJObj = (JSONObject)theJArray.get(i);
System.out.println("The secondJobj: " + secondJObj); //one object is one book and its info
JSONArray specificArr = (JSONArray)secondJObj.get("author"); //TODO
System.out.println("The specificArr is: " + specificArr); //returns null
System.out.println("The specific section: " + secondJObj.get("author")); //returns null
}
根据我的理解,所有内容都在 "items" 数组下,因此 "authors" 数组是另一个数组中的一个数组。如何访问 "authors" 数组中的信息?
我还需要书名和出版商,我知道它们不是数组,因此它不同于从 "authors" 数组中调用信息。如何从 "items" 数组中检索键值 "title" 和 "publisher" 的信息?
我可以在上面的代码中看到你的努力,但是 author
在 volumeInfo
JsonObject
"volumeInfo": {
"title": "Harry Potter and the Cursed Child",
"subtitle": "Parts one and two",
"authors": [
"Jack Thorne",
"J. K. Rowling",
"John Tiffany"
],
所以在for循环中首先你需要得到volumeInfo
作为JSONObject
然后得到author
作为JSONArray
for (int i = 0; i < theJArray.size(); i++)
{
JSONObject secondJObj = (JSONObject)theJArray.get(i);
System.out.println("The secondJobj: " + secondJObj); //one object is one book and its info
JSONObject volInfo = (JSONObject)secondJObj.get("volumeInfo"); //TODO
// then get author
JSONArray specificArr = (JSONArray)volInfo.get("author");
}