我尝试解析json使用jsontokener 这是我的jsontokener代码:
try {
JSONObject jObj = (JSONObject) new JSONTokener(strJson).nextValue();
String query = jObj.getString("query");
JSONArray location = jObj.getJSONArray("locations");
TextView tv = (TextView) findViewById(R.id.dummy_text);
tv.setText(query);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
TextView tv = (TextView) findViewById(R.id.dummy_text);
tv.setText("Wrong");
}
这是我的第一个strJson:
String strJson = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";
它会显示
披萨
我尝试将strJson更改为:
String strJson = "{"
+ " \"component\": "
+ "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}"
+ "}";
它会显示
错
这意味着代码进入捕获。 请帮助我如何改进我的代码,以便它可以在组件中进行查询。
答案 0 :(得分:1)
最后我找到了答案,我只是改进了代码:
try {
JSONObject jObj = (JSONObject) new JSONTokener(strJson).nextValue();
JSONObject obj = jObj.getJSONObject("component");
String query = obj.getString("query");
//JSONArray location = jObj.getJSONArray("locations");
TextView tv = (TextView) findViewById(R.id.dummy_text);
tv.setText(query);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
TextView tv = (TextView) findViewById(R.id.dummy_text);
tv.setText("Wrong");
}
答案 1 :(得分:1)
通常不需要直接使用JSONTokener类。这实际上只是JSONObject的Helper类。只需直接从字符串
创建一个新的JSON对象try {
JSONObject component = new JSONObject(strJson).getJSONObject("component");
String query = component.getString("query");
JSONArray locations = component.getJSONArray("locations");
// Do something ...
} catch( JSONException e) {
// Do something ...
}