11、SQL操作JSON字段

千里之行,始于足下

 


正文

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

回到顶部

一、Mysql操作Json字段:

参考

回到顶部

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

2.5、JSON数组转List<String>:

//p.getProperties():["数组一","数组二"]
List<String> stringList = JSONArray.parseArray(p.getProperties(), String.class);

 2.6、将JSON字符串解析为Java对象:

JSONObject.parseObject(a.toString(), B.class)

 

posted on   爱文(Iven)  阅读(959)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2021-12-26 2、Idea自定义背景设置
2021-12-26 MYSQL基础学习笔记
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示

目录导航