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