JSON基础(Java)

1.json maven 依赖(以下都以第一个包为例)

 <dependency>

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

 (

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>

)

2.表示法:

(1)JSON String 表示法,

用转义字符表示:

String aa = "{"1":"小红","2":"小王","3":"小明","4":"小张"}";

用单引号代替双引号:

String aa = "{'name':'zack','age':'20'}";

(2)org.json jar 下的 JSONObject 和 JSONArray

 

     JSONObject jsonObject = new JSONObject();
        jsonObject.put("1", "Rose");
        jsonObject.put("2", "JACK");
        jsonObject.put("3", "Mike");
        jsonObject.put("4", "Joe");
        System.out.println(jsonObject);
        
        JSONArray jsonArray = new JSONArray();
        jsonArray.put(1, "wwww");
        jsonArray.put(6, "aa");
        System.out.println(jsonArray);

 JSONObject

  • json对象在花括号中书写;
  • 对象包含多个名称/值对;

{"firstname":"John","lastname":"Doe"}

JSONArray

  • json数组在方括号中书写
  • 数组可包含多个对象
{
    "employees":[
    {"firstname":"alex","lastname":"andy"},
    {"firstname":"zack","lastname":"herry"}
    ]
}

JSON数组和JSON对象的区别

JSON数组:
{
    "cat":"it",
    "language":[
        {"id":1,"ide":"eclipse","name":Java},
        {"id":2,"ide":"XCode","name":"Swift"},
        {"id":3,"ide":"Visual Stdio","name":"C#"}     
    ],
    "pop":true
}

JOSN对象:
{
    "name": "Tim",
    "info": {
        "score": {
            "english": "A",
            "math": "B"
        },
        "age": 20
    }
}

(3)JSON的表示法

  第一种

  • 以(key/value)对的形式存在的无序的jsonObject对象。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”;“名称/值”对之间使用“,”分割。
  • 对于这种数据格式,key值必须要是String类型,而对于value,可以是String、number、object、array、boolean、null等数据类型
{
    "name":"zack",
    "age":20
}

第二种

有序的value集合,这种形式被称为jsonArray,数组是值(value)的有序集合。一个数组以“[”开始,以“]”结束,值之间使用“,”分隔。

{
    "student":
    [
    {"name":"zack","age":20},
    {"name":"jack","age":25}
    ]
}

3.map转换为JSON

方法一:

Map<String, String> map = new HashMap<>();
map.put("1", "小红");
map.put("2", "小王");
map.put("3", "小明");
map.put("4", "小张");
map.put("5", "小赵");
ObjectMapper json = new ObjectMapper();

try {
String string = json.writeValueAsString(map);
JSONObject jsonObject = new JSONObject(string);

} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

方法2:

用maven引入fastjson jar包

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
        Map<String, String> map = new HashMap<>();
        map.put("1", "小红");
        map.put("2", "小王");
        map.put("3", "小明");
        map.put("4", "小张");
        map.put("5", "小赵");
        String aString = JSON.toJSONString(map);
        System.out.println(aString);

4.JSON的解析

(1)第一个jar 包解析法:

String str = "{"1":"小红","2":"小王","3":"小明","4":"小张"}";

JSONObject jsonObject = new JSONObject(str);

System.out.println(jsonObject.getString("1"));
System.out.println(jsonObject.getString("2"));

System.out.println(jsonObject.getString("3"));

多层JSON嵌套JSONObject :

String jsonData="{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}";
JSONObject jsonObject1 =new JSONObject(jsonData);
JSONObject jsonObject2 = jsonObject1.getJSONObject("addr");
System.out.println(jsonObject2.getString("city"));

JSONArray 嵌套 JSONObject 

        String jsonString = "{'student':[{'name':'zack','age':20},{'name':'jack','age':25}]}";
        JSONObject jsonObject = new JSONObject(jsonString);

        JSONArray jsonArray = jsonObject.getJSONArray("student");
        System.out.println(jsonArray);
        for(int i=0;i<jsonArray.length();i++){
            JSONObject jObject = jsonArray.getJSONObject(i);
            System.out.println(jObject.getString("name"));
        }

在不知道key值的情况下可以如下解析:

     String aa = "{'name':'zack','age':'20'}";
        JSONObject jsonObject = new JSONObject(aa);

        Iterator<?> iterator = jsonObject.keys();
        String key = null;

        while (iterator.hasNext()) {
            key = (String) iterator.next();
            System.out.println(key);
            System.out.println(jsonObject.getString(key));
        }

(2)第二个jar包解析法(需要用[ ]把字符串包起来)

String aa = "[{"1":"小红","2":"小王","3":"小明","4":"小张"}]";

JSONArray jsonArray = JSONArray.fromObject(aa);
if (jsonArray.size() > 0) {
// 遍历 jsonarray 数组,把每一个对象转成 json 对象
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println(jsonObject.get("1"));
System.out.println(jsonObject.get("2"));
System.out.println(jsonObject.get("3"));
}
}

5.JSON 转换为替他格式

(1)to String

String str = jsonObject.toString();

 6.JSONTokener

  • JSONTokener读取包含json格式数据的文件,然后可以将JSONTokener对象作为参数来构造JSONObject或JSONArray,然后再进行相应的解析。

JSONTokener jsonTokener = new JSONTokener(jsonStr);

JSONObject jsonObject = new JSONObject(jsonTokener);

原文地址:https://www.cnblogs.com/lukelook/p/8391371.html