未终止的错误JSON解析

时间:2015-03-18 23:06:04

标签: android json gson

我有以下内容从此URL http://gdata.youtube.com/feeds/api/videos?q=red&alt=json

获取/解析json数据

使用GSON的代码:

HttpURLConnection conn = (HttpURLConnection) u.openConnection();

conn.setRequestMethod("GET");

conn.connect();
InputStream is = conn.getInputStream();

// Read the stream
byte[] b = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();

while ( is.read(b) != -1)
    baos.write(b);

String JSONResp = new String(baos.toByteArray());       

Log.d("SearchResult", JSONResp);

JsonElement jelement = new JsonParser().parse(JSONResp).getAsJsonObject().get("entry");

JsonArray arr = jelement.getAsJsonArray();

for (int i=0; i < arr.size(); i++) {
    result.add(convertYoutubeEntry(arr.get(i)));
}

return result;

堆栈跟踪:

    03-18 22:50:37.608: W/System.err(23255): com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 20482 path $.feed.entry[2].media$group.media$player
    03-18 22:50:37.608: W/System.err(23255):    at com.google.gson.internal.Streams.parse(Streams.java:56)
    03-18 22:50:37.609: W/System.err(23255):    at com.google.gson.JsonParser.parse(JsonParser.java:84)
    03-18 22:50:37.609: W/System.err(23255):    at com.google.gson.JsonParser.parse(JsonParser.java:59)
    03-18 22:50:37.609: W/System.err(23255):    at com.google.gson.JsonParser.parse(JsonParser.java:45)
    03-18 22:50:37.609: W/System.err(23255):    at com.example.remotestuff.SearchResultActivity$AsyncListViewLoader.doInBackground(SearchResultActivity.java:108)
    03-18 22:50:37.609: W/System.err(23255):    at com.example.remotestuff.SearchResultActivity$AsyncListViewLoader.doInBackground(SearchResultActivity.java:1)
    03-18 22:50:37.609: W/System.err(23255):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    03-18 22:50:37.609: W/System.err(23255):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    03-18 22:50:37.609: W/System.err(23255):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    03-18 22:50:37.609: W/System.err(23255):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    03-18 22:50:37.609: W/System.err(23255):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    03-18 22:50:37.609: W/System.err(23255):    at java.lang.Thread.run(Thread.java:818)
    03-18 22:50:37.609: W/System.err(23255): Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 20482 path $.feed.entry[2].media$group.media$player
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1573)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:495)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:418)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
    03-18 22:50:37.610: W/System.err(23255):    at com.google.gson.internal.Streams.parse(Streams.java:44)

使用JSONObject的代码:

// Read the stream
byte[] b = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();

while ( is.read(b) != -1)
    baos.write(b);

String JSONResp = new String(baos.toByteArray());

JSONObject json = new JSONObject(JSONResp);

JSONArray arr = json.getJSONArray("entry");


for (int i=0; i < arr.length(); i++) {
    result.add(convertYoutubeEntry(arr.getJSONObject(i)));
}

堆栈跟踪:

03-18 22:58:10.903: W/System.err(23965): org.json.JSONException: Unterminated object at character 2061 of {"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$app":"http://purl.org/atom/app#","xmlns$yt":"http://gdata.youtube.com/schemas/2007","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$media":"http://search.yahoo.com/mrss/","xmlns$georss":"http://www.georss.org/georss","xmlns$gml":"http://www.opengis.net/gml","id":{"$t":"http://gdata.youtube.com/feeds/api/videos"},"updated":{"$t":"2015-03-18T22:58:11.375Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://gdata.youtube.com/schemas/2007#video"}],"title":{"$t":"Videos matching: red","type":"text"},"logo":{"$t":"http://www.gstatic.com/youtube/img/logo.png"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.youtube.com"},{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos"},{"rel":"http://schemas.google.com/g/2005#batch","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos/batch"},{"rel":"self","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos?alt=json&q=red&start-index=1&max-results=25"},{"rel":"next","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos?alt=json&q=red&start-index=26&max-results=25"}],"author":[{"name":{"$t":"YouTube"},"uri":{"$t":"http://www.youtube.com/"}}],"generator":{"$t":"YouTube data API","version":"2.1","uri":"http://gdata.youtube.com"},"openSearch$try":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://gdata.youtube.com/schemas/2007#video"}],"title":{"$t":"Videos matching: red","type":"text"},"logo":{"$t":"http://www.gstatic.com/youtube/img/logo.png"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.youtube.com"},{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos"},{"rel":"http://schemas.google.com/g/2005#batch","type":"application/atom+xotalResults":{"$t":1000000},"openSearch$startIndex":{"$t":1},"openSearch$itemsPerPage":{"$t":25},"entry":[{"id":{"$t":"http://gdata.youtube.com/feeds/api/videos/Zlot0i3Zykw"},"published":{"$t":"2013-07-03T20:55:08.000Z"},"updated":{"$t":"2015-03-18T13:02:12.000Z"},"app$control":{"yt$state":{"$t":"Syndication of this video was restricted.","name":"restricted","reasonCode":"limitedSyndication"}},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://gdata.youtube.com/schemas/2007#video"},{"scheme":"http://gdata.youtube.com/schemas/2007/categories.cat","term":"Music","label":"Music"}],"title":{"$t":"Taylor Swift - Red","type":"text"},"content":{"$t":"Music video by Taylor Swift performing Red. (C) 2013 Big Machine Records, LLC.","type":"text"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.youtube.com/watch?v=Zlot0i3Zykw&feature=youtube_gdata"},{"rel":"http://gdata.youtube.com/schemas/2007#video.related","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos/Zlot0i3Zykw/related"},{"rel":"self","type":"application/atom+xml","href":"http://gdata.youtube.com/feeds/api/videos/Zlot0i3Zykw"}],"author":[{"name":{"$t":"TaylorSwiftVEVO"},"uri":{"$t":"http://gdata.youtube.com/feeds/api/users/TaylorSwiftVEVO"}}],"gd$comments":{"gd$feedLink":{"rel":"http://gdata.youtube.com/schemas/2007#comments","href":"http://gdata.youtube.com/feeds/api/videos/Zlot0i3Zykw/comments","countHint":39188}},"yt$hd":{},"media$group":{"media$category":[{"$t":"Music","label":"Music","scheme":"http://gdata.youtube.com/schemas/2007/categories.cat"}],"media$content":[{"url":"http://www.youtube.com/v/Zlot0i3Zykw?version=3&f=videos&app=youtube_gdata","type":"application/x-shockwave-flash","medium":"video","isDefault":"true","expression":"full","duration":242,"yt$format":5}],"media$description":{"$t":"Music video by Taylor Swift performing Red. (C) 2013 Big Machine Records, LLC.","type":"plain"},"
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.syntaxError(JSONTokener.java:450)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.readObject(JSONTokener.java:394)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.nextValue(JSONTokener.java:100)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.readArray(JSONTokener.java:430)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.nextValue(JSONTokener.java:103)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.readObject(JSONTokener.java:385)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.nextValue(JSONTokener.java:100)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.readObject(JSONTokener.java:385)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONTokener.nextValue(JSONTokener.java:100)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONObject.<init>(JSONObject.java:156)
03-18 22:58:10.904: W/System.err(23965):    at org.json.JSONObject.<init>(JSONObject.java:173)
03-18 22:58:10.904: W/System.err(23965):    at com.example.remotestuff.SearchResultActivity$AsyncListViewLoader.doInBackground(SearchResultActivity.java:101)
03-18 22:58:10.905: W/System.err(23965):    at com.example.remotestuff.SearchResultActivity$AsyncListViewLoader.doInBackground(SearchResultActivity.java:1)
03-18 22:58:10.905: W/System.err(23965):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-18 22:58:10.905: W/System.err(23965):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-18 22:58:10.905: W/System.err(23965):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-18 22:58:10.905: W/System.err(23965):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-18 22:58:10.905: W/System.err(23965):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-18 22:58:10.905: W/System.err(23965):    at java.lang.Thread.run(Thread.java:818)

有人知道我为什么会收到此错误吗?

0 个答案:

没有答案