16、SQL操作JSON字段
阅读原文时间:2023年07月08日阅读:3

Mysql5.7版本以后提供一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。

参考

1、存储方式:

注:代码以String类型声明

2、JSON格式查询:

SELECT t.`properties` ->> '$.cpu' FROM `t_jsondemo` t WHERE t.`properties` ->> '$.type'='ACTIVE1'

3、JSON数组格式查询:

SELECT * FROM `t_jsondemo` t WHERE JSON_EXTRACT(t.`properties`, '$[1]')='ACTIVE2'

SELECT * FROM `t_jsondemo` t WHERE JSON_EXTRACT(t.`properties`, '$[1].cpu') = 4

JSONobject是FastJson提供的对象,在API中是用一个私有的常量map进行封装的,实际就是一个map,只不过 FastJson对其进行了封装,添加了很多方便快捷的属性方法。

1、相关依赖:

com.alibaba fastjson 1.2.79

2、操作:

2.1、java对象转化成String

2.2、String类型转json对象,取JSON中的KEY

2.3、String对象转化为List类型

2.4、String对象转化为Map类型

public class JSONObjectDemo {

    public static void main(String\[\] args) {  
        //创建对象  
        List<JsonObjectVO> list = new ArrayList<>();  
        //对象1  
        JsonObjectVO vo1 = new JsonObjectVO();  
        vo1.setUuid(UUID.randomUUID().toString());  
        vo1.setName("1");  
        //对象2  
        JsonObjectVO vo2 = new JsonObjectVO();  
        vo2.setUuid(UUID.randomUUID().toString());  
        vo2.setName("2");  
        list.add(vo1);  
        list.add(vo2);  
        ResponseVO responseVO = ResponseVO.builder()  
                .uuid(UUID.randomUUID().toString())  
                .list(list)  
                .build();  
        /\*\*  
         \* 1、java对象转化成String  
         \* toPrint:{"list":\[{"name":"1","uuid":"b73bb9e8-f7a3-4dcf-8d8d-51313c7f5fd7"},{"name":"2","uuid":"ef109d35-cd07-45cd-9b45-791b205c878f"}\],"uuid":"dbc3b9c6-2360-4b83-9d15-b88fe7980f27"}  
         \* \*/  
        String str = **JSONObject.toJSONString(responseVO)**;  
        /\*\*  
         \* 2、String类型转json对象,取JSON中的KEY  
         \* toPrint:\[{"name":"1","uuid":"b73bb9e8-f7a3-4dcf-8d8d-51313c7f5fd7"},{"name":"2","uuid":"ef109d35-cd07-45cd-9b45-791b205c878f"}\]  
         \* \*/  
        Object data = **JSONObject.parseObject(str).get("list"****)**;  
        /\*\*  
         \* 3、将String对象转化为List类型  
         \* toPrint:\[JsonObjectVO(uuid=aebd390d-f543-4410-9c3a-98f2cb057757, name=1), JsonObjectVO(uuid=d170bb12-7570-47dd-8f2d-9ec2df5573c5, name=2)\]  
         \* \*/  
        List<JsonObjectVO> aList = **JSONObject.parseArray(JSONObject.toJSONString(data),JsonObjectVO.class****)**;  
        /\*\*  
         \* 4、将String对象转化为Map类型  
         \* \*/  
        Map map = **JSONObject.parseObject(JSONObject.toJSONString(vo1), Map.class****)**;

        System.out.println(str);  
        System.out.println(data);  
        System.out.println(aList);  
        System.out.println(map.get("name"));  
    }  
}

注:JSON字段在insert语句中采用String格式