0

我试图将此链接解析为 JSON,但总是收到错误无法转换为 JSONOject。

我已经尝试了一些样本,将字符串转换为 JSONObject,但其中任何一个都没有运气。对于这么多数据,我不确定 Inputstream 的大小是否更小。

HttpClient client = new DefaultHttpClient();
        // Perform a GET request to YouTube for a JSON list of all the
        // videos by a specific user

        //URI uri_ = new URI("https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46?v‌​=2&alt=json");
        HttpUriRequest request = new HttpGet("https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46?v%E2%80%8C%E2%80%8B=2&alt=json");
        // Get the response that YouTube sends back
        HttpResponse response = client.execute(request);


        // Convert this response into a readable string
        String jsonString = StreamUtils.convertToString(response.getEntity().getContent());

        System.out.println("JSON:" + jsonString );


        // Create a JSON object that we can use from the String
        JSONObject json = new JSONObject(jsonString);

将输入流转换为字符串的代码;

BufferedReader reader = new BufferedReader(new InputStreamReader(
                    inputStream, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            inputStream.close();

输出字符串:

{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$media":"http://search.yahoo.com/mrss/","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$yt":"http://gdata.youtube.com/schemas/2007","id":{"$t":"http://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46"},"updated":{"$t":"2012-11-22T17:11:53.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://gdata.youtube.com/schemas/2007#playlist"},{"scheme":"http://gdata.youtube.com/schemas/2007/tags.cat","term":"Bartle"},{"scheme":"http://gdata.youtube.com/schemas/2007/tags.cat","term":"Doo"},{"scheme":"http://gdata.youtube.com/schemas/2007/tags.cat","term":"Mumbles"}],"title":{"$t":"Mumbles","type":"text"},"subtitle":{"$t":"Bartle Doo!","type":"text"},"logo":{"$t":"http://www.youtube.com/img/pic_youtubelogo_123x63.gif"},"link":[{"rel":"alternate","type":"text/html","href":"https://www.youtube.com/playlist?list=PL2B3B8DDAE8F71C46"},{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46"},{"rel":"http://schemas.google.com/g/2005#batch","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46/batch"},{"rel":"self","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46?alt=json&start-index=1&max-results=25"}],"author":[{"name":{"$t":"edbassmaster"},"uri":{"$t":"https://gdata.youtube.com/feeds/api/users/edbassmaster"}}],"generator":{"$t":"YouTube data API","version":"2.1","uri":"http://gdata.youtube.com"},"openSearch$totalResults":{"$t":25},"openSearch$startIndex":{"$t":1},"openSearch$itemsPerPage":{"$t":25},"media$group":{"media$content":[{"url":"http://www.youtube.com/p/PL2B3B8DDAE8F71C46","type":"application/x-shockwave-flash","yt$format":5}],"media$description":{"$t":"Bartle Doo!","type":"plain"},"media$thumbnail":[{"url":"http://i.ytimg.com/vi/6S7zwXGBiTE/default.jpg","height":90,"width":120,"yt$name":"default"},{"url":"http://i.ytimg.com/vi/6S7zwXGBiTE/mqdefault.jpg","height":180,"width":320,"yt$name":"mqdefault"},{"url":"http://i.ytimg.com/vi/6S7zwXGBiTE/hqdefault.jpg","height":360,"width":480,"yt$name":"hqdefault"}],"media$title":{"$t":"Mumbles","type":"plain"}},"yt$playlistId":{"$t":"PL2B3B8DDAE8F71C46"},"entry":[{"id":{"$t":"http://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46/PLaFx1lHMY9-c3iy7KngIxLbSSS_9OLXMd"},"published":{"$t":"2011-07-21T15:14:04.000Z"},"updated":{"$t":"1970-01-01T00:00:00.000Z"},"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":"Comedy","label":"Comedy"}],"title":{"$t":"Mumbles at the Bassmaster Classic","type":"text"},"content":{"$t":"My official Face Book:\r\nhttp://www.facebook.com/pages/Ed-Bassmaster/259411429706\r\n\r\nMy T Shirts:\r\nhttp://www.districtlines.com/ed-bassmaster","type":"text"},"link":[{"rel":"alternate","type":"text/html","href":"https://www.youtube.com/watch?v=6S7zwXGBiTE&feature=youtube_gdata"},{"rel":"http://gdata.youtube.com/schemas/2007#video.responses","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/videos/6S7zwXGBiTE/responses"},{"rel":"http://gdata.youtube.com/schemas/2007#video.related","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/videos/6S7zwXGBiTE/related"},{"rel":"http://gdata.youtube.com/schemas/2007#mobile","type":"text/html","href":"https://m.youtube.com/details?v=6S7zwXGBiTE"},{"rel":"related","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/videos/6S7zwXGBiTE"},{"rel":"self","type":"application/atom+xml","href":"https://gdata.youtube.com/feeds/api/playlists/2B3B8DDAE8F71C46/PLaFx1lHMY9-c3iy7KngIxLbSSS_9OLXMd"}],"author":[{"name":{"$t":"edbassmaster"},"uri":{"$t":"https://gdata.youtube.com/feeds/api/users/edbassmaster"}}],"gd$comments":{"gd$fee

请帮我解决问题。谢谢,尤维

4

3 回答 3

0
String json = EntityUtils.toString(response.getEntity(), "UTF-8");
return new JSONObject(json);
于 2012-12-13T21:02:09.117 回答
0

我在 2.3 上也有同样的问题,但在 4.0 上没问题。我整个晚上都在寻找解决方案。这很简单 - 需要从字符串中删除从 url 接收的第一个符号。

// Convert this response into a readable string
String jsonString = StreamUtils.convertToString(response.getEntity().getContent());
jsonString = jsonString.substring(1);
于 2013-08-25T21:27:51.853 回答
0

在这个 AnyTask 类中,我下载并解析 json

private List<HashMap<String, String>> mapList = new ArrayList<HashMap<String, String>>();

    private InputStream is;

     @Override
            protected List<HashMap<String, String>> doInBackground(String... urls) {

                try {
                    DefaultHttpClient httpClient = getNewHttpClient();
                    HttpGet get = new HttpGet((String) urls[0]);
                    HttpResponse httpResponse = httpClient.execute(get);
                    HttpEntity httpEntity = httpResponse.getEntity();

                    is = httpEntity.getContent();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(
                            is, "iso-8859-1"));
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    is.close();
                    JSONArray jsonArray = new JSONArray(sb.toString());
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject row = jsonArray.getJSONObject(i);
                            DowloadSpecificJson(row);


                        }
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return mapList;
            }

    private void DowloadSpecificJson(JSONObject row) throws JSONException {

        HashMap<String, String> map = new HashMap<String, String>();
map.put("id", row.getString("id"));
            map.put("name", row.getString("name"));
            map.put("img", row.getString("img"));

mapList.add(map);
}
于 2012-12-13T20:21:31.393 回答