0

我尝试使用 jsontokener 解析 json 这是我的 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 ] "
                 + "}"
             + "}";

它会显示

错误的

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

4

2 回答 2

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 ...
}
于 2014-12-13T10:15:20.557 回答
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");
    }
于 2013-06-04T03:11:07.493 回答