我想从这个 url ( http://api.flickr.com/services/feeds/photos_public.gne?format=json ) 解析 JSON,但文档实际上返回了一个无效的 JSON。看
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"
}, ...
我想让我的解析器尽可能通用,那么有什么更好的方法来删除文档的“jsonFlickrFeed(”)部分并且只使用它自己的 JSON?
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;
}
}