前言:
json 就是键值对关系,和Map很像,两者都可以嵌套其他键值对关系或者其他数据结构。

1.举个简单 json 字符串例子

String jsonStr =  "{" +
                "\"list\":[\"第一条数据\",\"第二条数据\"]," +
                "\"data\":[{\"url\":\"baidu.com\",\"content\":\"百度搜索引擎\"},{\"url\":\"google.com\",\"content\":\"谷歌搜索引擎\"}]," +
                "\"message\":\"OK\"" +
                "}";

上面字符串有三种常见 json 格式
1)message,属于最常见的键值对,属于最标准的 json 字符串;
2)list,是列表,其值属于 jsonarray 格式;
3)data,属于键值对里面嵌套键值对,其值也属于 jsonarray 格式

2.下面就对这三种格式进行解析

首先声明依赖的包(除了 org 的包,还有 ali 的 fastjson 也很好,方法不同,功能没差)

<dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>

贴代码

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Set;

public class JsonAnalysis {
    public static void main(String[] args){
        String jsonStr =  "{" +
                "\"list\":[\"第一条数据\",\"第二条数据\"]," +
                "\"data\":[{\"url\":\"baidu.com\",\"content\":\"百度搜索引擎\"},{\"url\":\"google.com\",\"content\":\"谷歌搜索引擎\"}]," +
                "\"message\":\"OK\"" +
                "}";

        JSONObject jsonObject = new JSONObject(jsonStr);

        //获取json对象的关键字,这个方法用于暴露未知json字符串结构
        Set<String> set = jsonObject.keySet();
        for(String str:set){
            System.out.println("json对象关键字:"+str);
        }

        //解析 message
        String message = jsonObject.optString("message","");//建议使用opt(如果没有关键字会把后面的值赋给message)
        System.out.println("message:"+message);

        //解析 list
        JSONArray jsonArray = jsonObject.optJSONArray("list");
        for(Object o : jsonArray){ //不能直接用String声明,会出错
            System.out.println(o.toString());
        }

        //解析 data
        JSONArray jsonArrayData = jsonObject.optJSONArray("data");//如果没有data会赋值null,用get的话会报错
        for (Object o : jsonArrayData){ //需要转成JSONObject再解析
            JSONObject objectToJson = (JSONObject) o;
            System.out.print("url:"+objectToJson.optString("url","") + ",");
            System.out.print("content:"+objectToJson.optString("content",""));
            System.out.println();
        }
    }
}

3.输出

json对象关键字:data
json对象关键字:list
json对象关键字:message
message:OK
第一条数据
第二条数据
url:baidu.com,content:百度搜索引擎
url:google.com,content:谷歌搜索引擎

4.注意:
其中解析 data 时,因为里面嵌套的是 json 标准对象,所以要转换成 json 对象进行处理。

与君共勉,祝君进步。