我想从URL解析JSON响应,但我总是遇到错误。我尝试了很多,但未能解决问题。请建议我纠正错误。
我的JSON回复:
{
"classification": {
"relevancyScore": 999,
"searchUrl": {
"value": "http://www.bizrate.com/iphone-cases/index__rf--af1__af_assettype_id--10__af_creative_id--6__af_id--50085__af_placement_id--1.html"
}
},
[.. hundreds of lines removed ..]
我的代码:
public class test extends Activity {
/** Called when the activity is first created. */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView lv = (ListView)findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));
}
public ArrayList<String> fetchTwitterPublicTimeline()
{
ArrayList<String> listItems = new ArrayList<String>();
try {
URL twitter = new URL(
"http://catalog.bizrate.com/services/catalog/v1/us/product?publisherId=50085&placementId=1&categoryId=1&keyword=iphone+cases&start=0&results=10&sort=relevancy_desc&brandId=&attFilter=&zipCode=90291&biddedOnly=&minRelevancyScore=100&apiKey=58f536aa2fab110bbe0da501150bac1e&format=json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));
String line;
String str;
while ((line = in.readLine()) != null) {
//str = line.substring(line.indexOf("{"), line.lastIndexOf(line));
//str = line.replaceAll("BIZRATE.Suggest.callback(", null);
//str = str.replaceAll(")", null);
//System.out.println("SubString:"+str);
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
System.out.println("value----"+jo.getJSONObject("product"));
//listItems.add(jo.getString("suggestions"));
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listItems;
}
}
我必须解析所有产品的信息。
答案 0 :(得分:2)
如果你有一个来自服务器的大型JSON文件,最好使用gson解析器。我在阅读大JSON时也出现内存不足错误。因为JSON首先将数据加载到解析它的内存中。因此可能会出现内存不足异常的变化。
答案 1 :(得分:1)
你可以使用一个开放的API Gson.jar从Json中获取数据..它以标准化方式获取数据...例如试试...... http://blog.foos-bar.com/2010/08/parsing-facebook-json.html
答案 2 :(得分:1)
您必须先下载完整的JSON才能解析它。这应该可以帮助您完成项目:
try {
URL twitter = new URL("http://catalog.bizrate.com/services/catalog/v1/us/product?publisherId=50085&placementId=1&categoryId=1&keyword=iphone+cases&start=0&results=10&sort=relevancy_desc&brandId=&attFilter=&zipCode=90291&biddedOnly=&minRelevancyScore=100&apiKey=58f536aa2fab110bbe0da501150bac1e&format=json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(tc.getInputStream()));
String line;
String str = "";
while ((line = in.readLine()) != null) {
str += line;
}
JSONObject jo = new JSONObject(str);
JSONArray ja = jo.getJSONObject("products").getJSONArray("product");
for (int i = 0; i < ja.length(); i++) {
Log.i("MyDebug", "value----" + ja.getJSONObject(i).getString("manufacturer"));
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果您不确定密钥是否存在,请务必使用has("")
。