Flickr JSON Parsing in Android

依然范特西╮ 提交于 2019-12-12 05:28:08

问题


I want to parse the JSON from this url (http://api.flickr.com/services/feeds/photos_public.gne?format=json) but the document actually returns a non valid JSON. See

       jsonFlickrFeed({
        "title": "Uploads from everyone",
        "link": "http://www.flickr.com/photos/",
        "description": "",
        "modified": "2012-11-26T18:27:41Z",
        "generator": "http://www.flickr.com/",
        "items": [
       {
            "title": "2012 Thanksgiving Holiday Weekend",
            "link": "http://www.flickr.com/photos/agape_boarding_school/8220697785/",
            "media": {"m":"http://farm9.staticflickr.com/8478/8220697785_bb298ac5b3_m.jpg"},
            "date_taken": "2012-11-24T14:19:21-08:00",
            "description": " <p><a href=\"http://www.flickr.com/people/agape_boarding_school/\">Agape Boarding School<\/a> posted a photo:<\/p> <p><a href=\"http://www.flickr.com/photos/agape_boarding_school/8220697785/\" title=\"2012 Thanksgiving Holiday Weekend\"><img src=\"http://farm9.staticflickr.com/8478/8220697785_bb298ac5b3_m.jpg\" width=\"240\" height=\"159\" alt=\"2012 Thanksgiving Holiday Weekend\" /><\/a><\/p> <p>Great Day at Agape Boarding School<\/p>",
            "published": "2012-11-26T18:27:41Z",
            "author": "nobody@flickr.com (Agape Boarding School)",
            "author_id": "36563683@N07",
            "tags": "school boarding agape"
       },  ...

I want to let my parser be as general as possible so what is the better way to remove that "jsonFlickrFeed(" part of the document and work only with the JSON it self?

public class JSONParser extends AsyncTask <String, Void, JSONObject> {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

@Override
protected JSONObject doInBackground(String... params) {
    String url=params[0];

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();           

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;
}

}


回答1:


I have solved this issue by given way.

Flickr old web API is: http://api.flickr.com/services/feeds/photos_public.gne?id=xxxxxxxx&lang=en-us&format=json

Flickr latest web API is: http://api.flickr.com/services/feeds/photos_public.gne?id=xxxxxxxx&lang=en-us&format=json&nojsoncallback=1

Use Latest one web API.

Replace your user id instead of xxxxxxxx.

Hope it will helpful to you.




回答2:


Looks like what you want is th raw json. You'll want to add a "nojsoncallback=1" to remove the function wrapper.

[See FLICKR JSON Response Format](https://forum.processing.org/one/topic/flickr-json-parsing-noob.html"If you just want the raw JSON, with no function wrapper")




回答3:


As you said, you will just have to remove this part of the String before you parse it.

If you want to be more general you can search for the first { char and delete everything before it, and the last } char and delete everything after it. But this still won't ensure that the input is valid.



来源:https://stackoverflow.com/questions/13571666/flickr-json-parsing-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!