【发布时间】:2016-02-19 17:59:23
【问题描述】:
我一直在尝试使用 Gson 创建一种导入轨道数据的方法。这是我第一次尝试使用 Gson,我很难理解我哪里出错了。我正在尝试使用 spotify 的 json。这是我正在使用的地址。 https://api.spotify.com/v1/search?q=%22Perform%20this%20way%22&type=track 我创建了一个类来导入它。我一直在关注本指南。 http://www.javabeat.net/invoking-restful-web-service-using-api-in-java-net-and-gson/
我在输入查询并允许继续后收到以下错误..
Exception in thread "main" java.lang.IllegalStateException: This is not a JSON Array.
at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106)
at TestingNonApplication.GsonTesting.main2(GsonTesting.java:72)
- 指这一行。 JsonArray jArray = rootElement.getAsJsonArray();
有什么我遗漏的吗?我不确定是否需要 toString 或序列化。
package TestingNonApplication;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Scorchgid
*/
public class GsonTesting {
/**
* @param args the command line arguments
*/
String baseURLStart = "http://api.spotify.com/v1/search?q=\"";
String baseURLEnd = "\"&type=track";
String jsonSource;
public static void main(String[] args) {
try {
GsonTesting gTest = new GsonTesting();
gTest.main2();
} catch (FileNotFoundException ex) {
Logger.getLogger(GsonTesting.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(GsonTesting.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void main2() throws FileNotFoundException, MalformedURLException, IOException {
Scanner commandlineReader = new Scanner(System.in);
String searchString = "";
boolean contin = false;
while (contin == false) {
System.out.println("Enter query");
String query = commandlineReader.nextLine();
searchString = baseURLStart + query + baseURLEnd;
searchString = searchString.replace(" ", "%20");
System.out.println(searchString
+ "\r\n Type Yes to continue or anything else to re enter");
query = commandlineReader.nextLine();
if (query.equalsIgnoreCase("yes")) {
contin = true;
}
}
//----------------------------------------------------------------------
/* Connection and Response */
URLConnection urlConnection = new URL(searchString).openConnection();
urlConnection.connect();
JsonReader reader = new JsonReader(new InputStreamReader(urlConnection.getInputStream()));
JsonParser jsonParser = new JsonParser();
JsonElement rootElement = jsonParser.parse(reader);
JsonArray jArray = rootElement.getAsJsonArray();
List results = new ArrayList();
Gson gson = new Gson();
for (JsonElement spotifyElement : jArray) {
Tracks spot = gson.fromJson(rootElement, Tracks.class);
results.add(spot);
System.out.println(spot.toString());
}
}
}
class Tracks {
String href;
List<Items> items;
public class Items {
Album albums;
public class Album {
String album_type;
String[] available_markets;
External_Urls external_urls;
public class External_Urls {
String spotify;
}
String href;
String id;
List<Image> images;
public class Image {
Integer height;
String url;
Integer width;
}
String name;
String type;
String uri;
List<Artists> artists;
}
List<Artists> artist;
public class Artists {
External_Urls external_urls;
public class External_Urls {
String spotify;
}
String herf;
String id;
String name;
String type;
String uri;
}
String avaliable_markets;
Integer disc_number;
Integer duration;
Boolean explicity;
External_Urls external_ids;
public class External_Ids {
String isrc;
}
External_Urls external_urls;
public class External_Urls {
String spotify;
}
String herf;
String id;
String name;
Integer popularity;
String preview_url;
Integer tracknumber;
String type;
String uri;
}
Integer limit;
String next;
Integer offset;
String previous;
Integer total;
}
【问题讨论】:
-
“这不是 JSON 数组”如何作为消息不够清晰?或者您是否不理解 JSON object 和 JSON array 之间的区别?请参考 RFC 7159
-
什么不是 JSON 数组。我正在传递的链接呢?我列出的代码?并回答你的问题。我以为我做到了,但我想我没有。我使用的指南是否导致我做出任何不正确的假设?
-
我就是这么说的。我点击了链接。它是一个 JSON OBJECT。请阅读 RFC 7159 和 json.org