android解析json对象使用jsontokener

时间:2013-06-04 03:01:13

标签: java android json

我尝试解析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 ] "
                 + "}"
             + "}";

它会显示

  

这意味着代码进入捕获。 请帮助我如何改进我的代码,以便它可以在组件中进行查询。

2 个答案:

答案 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 ...
}