如何解析这个json字符串?

时间:2014-04-25 12:10:13

标签: android json

我想解析这个json.i有困难,当我尝试解析以下json.suggest我正确的解析方式跟随json.i编辑我的代码,不,这是我想要解析的正确代码。

  {
"tag":{
    "tag1":1,
    "tag2": "colour",
    "tag3":"value",
    "tag4":"value",
    "tag5":1,
    "tag6":1,
    "tag7":true,
    "tag8": [
            {
            "t1":"Red",
            "t2":"int",
            "t3":1,
            "t4":true
            },
            {
            "t1":"Green",
            "t2":"int",
            "t3":2,
            "t4":true
            },
            {
            "t1":"Blue",
            "t2":"int",
            "t3":3,
            "t4":true
            }
             ],
    "tag9":null,
    "tag10":1
},
"tag":{
    "tag1":2,
    "tag2": "value",
    "tag3":"value",
    "tag4":"value",
    "tag5":1,
    "tag6":1,
    "tag7":true,
    "tag8": [
            {
            "t1":"value",
            "t2":"value",
            "t3":true,
            "t4":true,

            },
            {
            "t1":"value",
            "t2":"value",
            "t3":false,
            "t4":true,

            }
             ],
    "tag9":1,
    "tag10":3
},
"tag":{
    "tag1":5,
    "tag2": "value",
    "tag3":"value",
    "tag4":"value",
    "tag5":1,
    "tag6":1,
    "tag7":false,
    "tag8": null,
    "tag9":null,
    "tag10":null
}

}

i had used this code        
    try {
        JSONObject json= (JSONObject) new JSONTokener(loadJSONFromAsset()).nextValue();
        JSONObject json2 = json.getJSONObject("tag");
        for (int i = 0; i < json.length(); i++) {
            int tag1 = (Integer) json2.get("tag1");
            String tag2 = (String) json2.get("tag2");
            String tag3 = (String) json2.get("tag3");
            String tag4 = (String) json2.get("tag4");
            int tag5 = (Integer) json2.get("tag5");
            int tag6 = (Integer) json2.get("tag6");
            boolean tag7 = json2.getBoolean("tag7");
            if (!json2.isNull("tag8")) {
                JSONArray jArray = json2.getJSONArray("tag8");
                JSONObject json_data = null;
                for (int i1 = 0; i1 < jArray.length(); i1++) {
                    json_data = jArray.getJSONObject(i1);
                    String Label = json_data.getString("t1");
                    String ValueType = json_data.getString("t2");
                    int Value = json_data.getInt("t3");
                    boolean isNextEnabled = json_data.getBoolean("t4");
                }
            }
            int previous = 0;
            if (!json2.isNull("tag9")) {

                 previous= (Integer) json2.get("tag9");
            }
            int next = 0;
            if (!json2.isNull("tag10")) {

                next = (Integer) json2.get("tag10");
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


public String loadJSONFromAsset() {
    String json = null;
    try {

        InputStream is = getAssets().open("myjson");

        int size = is.available();

        byte[] buffer = new byte[size];

        is.read(buffer);

        is.close();

        json = new String(buffer, "UTF-8");


    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return json;

}
}

我只获得最后一条记录,我如何获得所有数据。感谢所有的帮助...

2 个答案:

答案 0 :(得分:0)

JSONOject有一个构造函数,它接受一串JSON数据。您可以使用构造函数来解析JSON字符串。如果字符串是有效的JSON数据,则构造函数将返回JSONObject。如果字符串是无效的JSON,构造函数将抛出错误。将构造函数包装在try / catch块中是一种很好的做法。

String json = "{name:\"value\"}";
JSONObject item = null;
try{
  item = new JSONObject(json);
}catch(Exception exc){
  Log.d(TAG, exc.toString());
}
if(item != null){
  Log.d(TAG, String.format("name:%s", item.getString("name")));
}

答案 1 :(得分:0)

你可以尝试解析你的字符串@ http://json.parser.online.fr/它对我很好。

从JSON字符串的静态审查看来,您的输入中有3次“标记”元素,并且由于该解析器可能会混淆。尝试删除重复的条目,然后尝试。