16、SQL操作JSON字段

时间:2022-12-26 19:04:33

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

一、Mysql操作Json字段:

参考

1、存储方式:

16、SQL操作JSON字段

注:代码以String类型声明

 

2、JSON格式查询:

16、SQL操作JSON字段

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

 

3、JSON数组格式查询:

16、SQL操作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操作JSON字段:

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

1、相关依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.79</version>
</dependency>

 

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格式