在解析之前首先要清楚要解析的json 是字符形式 还是数组形式
1 字符形式
public String json = "{\"年龄\":\"23\",\"爱好\":\"游戏\",\"姓名\":\"小牧\"}";
看看解析效果图
使用JSONObject 看下面代码
try {
JSONObject jsonObject = new JSONObject(json);
Iterator<String> it = jsonObject.keys();
while (it.hasNext()) {
String key = it.next();
Log.e("=====key", key);
String value = jsonObject.get(key).toString();
Log.e("=====value", value);
}
} catch (JSONException e) {
e.printStackTrace();
}
打印结果
2 数组形式
public String jsonn = "[{\"年龄\":\"23\"},{\"爱好\":\"游戏\"},{\"姓名\":\"小牧\"}]";
解析效果图
使用JSONArray
try {
JSONArray jsonArray = new JSONArray(jsonn);
Log.e("===jsonArray", jsonArray.toString());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
Iterator<String> keys = object.keys();
while (keys.hasNext()) {
String key = keys.next();
Log.e("=======key", key);
String value = object.get(key).toString();
Log.e("=====value", value);
}
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("=====error", e.getMessage());
}
打印结果如下
这样看着没难度啊,来整个复杂点的 看看把
[{
"中午餐": [{
"主食": ["米饭", "馒头"]
}, {
"主菜": ["辣白菜五花肉", "地三鲜"]
}]
}, {
"晚餐": [{
"主食": ["面条", "馒头"]
}, {
"主菜": ["土豆肉片", "江三鲜"]
}]
}]
把 json 定义一个string 如下
public String json = "[{\n" +
"\"中午餐\": [{\n" +
"\"主食\": [\"米饭\", \"馒头\"]\n" +
"}, {\n" +
"\"主菜\": [\"辣白菜五花肉\", \"地三鲜\"]\n" +
"}]\n" +
"}, {\n" +
"\"晚餐\": [{\n" +
"\"主食\": [\"面条\", \"馒头\"]\n" +
"}, {\n" +
"\"主菜\": [\"土豆肉片\", \"江三鲜\"]\n" +
"}]\n" +
"}]";
把数据获取出来,然后自己放到布局上对应的位置 ,当时看到的时候心情也是一阵复杂呢
不要着急,看下面的代码
try {
JSONArray array = new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Iterator<String> keys = object.keys();
while (keys.hasNext()) {
//中午餐的key
String key = keys.next();
Log.e("key", key);
//中午餐里面的内容
JSONArray array1 = object.getJSONArray(key);
for (int j = 0; j < array1.length(); j++) {
JSONObject object1 = array1.getJSONObject(j);
Iterator<String> keys1 = object1.keys();
while (keys1.hasNext()) {
//主食key
String kStr = keys1.next();
Log.e("kStr", kStr);
//主食key里面的数组
JSONArray array2 = object1.getJSONArray(kStr);
for (int k = 0; k < array2.length(); k++) {
//主食key里面的数组中的值
Log.e("content", array2.getString(k));
}
}
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
效果图