依赖
导入阿里的 fastjson 依赖。
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.78</version>
        </dependency>
类型转换
String 与 JSON 相互转换
通过 JSONObject.parseObject(String str) 将字符串转换为 JSONObject 对象,此方法支持 JSON 字符串,JSON 字符串格式如下:
写法一:
{
	"code":"1",
	"status":"success",
	"target":"年入百万",
	"msg":{
		"seq":"20230424",
		"weather":"晴",
		"salary":9000.00,
		"job":"摆地摊"
	},
	"goods":{
		"sum":2000.00,
		"manufacturer":{
			"address":"青口",
			"boss":"张三"
		},
		"details":[
			{
				"name":"土豆",
				"weight":"500斤"
			},
			{
				"name":"豆腐",
				"weight":"250斤"
			}
		]
	}
}
写法二:
{"code":"1","status":"success","target":"年入百万","msg":{"seq":"20230424","weather":"晴","salary":9000.00,"job":"摆地摊"},"goods":{"sum":2000.00,"manufacturer":{"address":"青口","boss":"张三"},"details":[{"name":"土豆","weight":"500斤"},{"name":"豆腐","weight":"250斤"}]}}
转换案例代码:
        String JSONstr1 = "{\n" +
                "\t\"code\":\"1\",\n" +
                "\t\"status\":\"success\",\n" +
                "\t\"target\":\"年入百万\",\n" +
                "\t\"msg\":{\n" +
                "\t\t\"seq\":\"20230424\",\n" +
                "\t\t\"weather\":\"晴\",\n" +
                "\t\t\"salary\":9000.00,\n" +
                "\t\t\"job\":\"摆地摊\"\n" +
                "\t},\n" +
                "\t\"goods\":{\n" +
                "\t\t\"sum\":2000.00,\n" +
                "\t\t\"manufacturer\":{\n" +
                "\t\t\t\"address\":\"青口\",\n" +
                "\t\t\t\"boss\":\"张三\"\n" +
                "\t\t},\n" +
                "\t\t\"details\":[\n" +
                "\t\t\t{\n" +
                "\t\t\t\t\"name\":\"土豆\",\n" +
                "\t\t\t\t\"weight\":\"500斤\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\t\"name\":\"豆腐\",\n" +
                "\t\t\t\t\"weight\":\"250斤\"\n" +
                "\t\t\t}\n" +
                "\t\t]\n" +
                "\t}\n" +
                "}";
        String JSONstr2 = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";
        JSONObject jsonObject1 = JSONObject.parseObject(JSONstr1);
        JSONObject jsonObject2 = JSONObject.parseObject(JSONstr2);
        System.out.println(jsonObject1);
        System.out.println(jsonObject2);
输出:
 
如果是 JSONArray 类型的字符串,如下:
		"details":[
			{
				"name":"土豆",
				"weight":"500斤"
			},
			{
				"name":"豆腐",
				"weight":"250斤"
			}
		]
则需要用 JSONArray.parseArray()
将 JSON 转换为 String,使用 toJSONString() ,如下:
        JSONObject jsonObject = new JSONObject();
        jsonObject.toJSONString();
        JSONObject.toJSONString(jsonObject);
		JSONArray JSONArray = new JSONArray();
        JSONArray.toJSONString();
        JSONArray.toJSONString(JSONArray);
JSON 与 实体类
@Slf4j
public class Test2 {
    public static void main(String[] args) {
        String roleStr = "{\"name\":\"张三\",\"age\":7}";
        Role role = JSONObject.parseObject(roleStr, Role.class);
        log.info(role.toString());
        log.info(role.getName());
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Role {
    private String name;
    private Integer age;
}

JSON 与 Map
        Map<String, Object> map = new HashMap<>();
        map.put("name", "张三");
        map.put("age", 17);
        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(map));
XML 与 Map 相互转换
https://blog.csdn.net/y1534414425/article/details/105770851
增删改查
获取数据
获取 JSONObject 数据:
根据 key 值获取对应的 value 数据。
        // 获取 target 的值,返回 String
        String target = jsonObject2.getString("target");
        // 获取 code 的值,返回 Object
        Object code = jsonObject2.get("code");
        // 获取 msg 的值,返回 JSONObject
        JSONObject msg = jsonObject2.getJSONObject("msg");
        // 获取 details 的值,返回 JSONArray
        JSONArray jsonArray = jsonObject2.getJSONObject("goods").getJSONArray("details");
注意:当要获取的数据不存在于 JSONObject ,获取到的对象为 null,单不会报 NullPointerException,如果继续对此 null 对象获取数据,会报 NullPointerException 。
 
获取 JSONArray 数据:
根据索引位置返回对象,索引下标从 0 开始。
        // 获取索引为 0 处的 JSON 对象,返回 Object
        Object o = jsonArray.get(0);
        // 获取索引为 0 处的 JSON 对象,返回 JSONObject
        JSONObject jsonObject = jsonArray.getJSONObject(0);
注意:如果要获取的数据不存在于 JSONArray 中,会报空指针。
移除数据
删除 JSONObject 中的数据:
        // 删除指定的 key ,返回被删除的数据 Object
        Object msg1 = jsonObject1.remove("msg");
        // 当 code 的值为 2 的时候才删除,删除成功返回 true,否则返回 false
        boolean code1 = jsonObject1.remove("code", "2");
注意:要移除的元素不在 JSONObject 中,并不会抛出异常。
删除 JSONArray 中的数据:可通过 jsonArray.size() 获取 JSONArray 中的 JSONObject 个数。
        // 移除索引为 0 的 JSONObject
        boolean remove1 = jsonArray.remove("0");
        // 移除指定的 JSONObject
        boolean remove = jsonArray.remove(jsonArray.getJSONObject(0));
        List<JSONObject> jsonObjects = new ArrayList<>();
        for (Object obj : jsonArray) {
            jsonObjects.add((JSONObject) obj);
        }
        // 移除所有 JSONObject
        boolean b = jsonArray.removeAll(jsonObjects);
注意:要移除的元素不在 JSONArray 中,并不会抛出异常。
新增数据
JSONObject 新增数据:
        JSONObject jsonObject = new JSONObject();
        // 插入 key-value ,如果已存在,则覆盖原来的 key 的 value,返回 Object
        Object tip = jsonObject.put("tip", "脱下长衫,摆摊致富");
        Map<String, Object> map = new HashMap<>();
        map.put("name", "大学生");
        map.put("major","通信工程");
        map.put("age", 22);
        // 插入 map
        jsonObject.putAll(map);
        // 插入 key-value ,如果 key 已存在,则插入失败且返回已有的 key-value
        Object tip1 = jsonObject.putIfAbsent("tip", "摆摊摆摊,日赚九千");
        // 将 map 作为 JSONObject 插入
        jsonObject.put("map", map);
JSONArray 新增数据:类似于 JSONObject,不过是 <索引 + Object>,而JSONObject 是 <key-value> 。

注意:JSONArray 给同一索引插入两次 JSONObject ,效果如下:
 
修改数据
        String str = "{\"code\":\"1\",\"status\":\"success\",\"target\":\"年入百万\",\"msg\":{\"seq\":\"20230424\",\"weather\":\"晴\",\"salary\":9000.00,\"job\":\"摆地摊\"},\"goods\":{\"sum\":2000.00,\"manufacturer\":{\"address\":\"青口\",\"boss\":\"张三\"},\"details\":[{\"name\":\"土豆\",\"weight\":\"500斤\"},{\"name\":\"豆腐\",\"weight\":\"250斤\"}]}}";
        JSONObject jsonObject = JSONObject.parseObject(str);
        // 替换对应 key 的 value
        jsonObject.replace("code", 1);
        JSONObject msg = jsonObject.getJSONObject("msg");
        msg.replace("salary", 10000.00);
        jsonObject.replace("msg", msg);
        // 替换对应 key 的 oldValue 为 newValue,如果 oldValue 不存在,则不替换
        jsonObject.replace("target", "年入十万", "年入千万");
注意:jsonObject 的 put(String key, Object value) 也能达到 replace 的效果。









![【LeetCode】数据结构刷题(2)[查找链表的中间节点]](https://img-blog.csdnimg.cn/12995a374b7340b68625b325996ce3e5.png#pic_center)









