一般的json直接 get_json_object(column,'$.key') 可以直接取出对应字段
column:存储json的列
key:json中的key
代码事例:
select
company_id
,tag_manage
,get_json_object(tag_manage,'$.SERVICE_PROMISE')
from XXX
where
XXX
结果:
数据被解析出来了,但是key(SERVICE_PROMISE)里面存的是数组,而且get_object_json得到的结果是一个字符串。如何进一步解析?
方案一:可以将得到的字符串转化为数组,利用函数split(String,Separator),是将String根据Separator来分割成数据,在进行结下来的操作。(顺便记录下求数组长度的函数size(array))
方案二:直接获取数组中指定位置的值,get_json_object(column,'$.key[index]'),可直接得到数组中指定位置的某个值
方案二代码示例
select
company_id
,tag_manage
,get_json_object(tag_manage,'$.SERVICE_PROMISE')
,get_json_object(tag_manage,'$.SERVICE_PROMISE[0]')
from XXX
where
XXX
结果:
上面只能获得数组中某个位置的值,如果想要的值并不确定在第几位,咋整?
可以json解析后拿到数组,这时候数结果其实是字符串,使用函数instr(String,target)判断字符串String是否包含子串target,如果包含则返回子串的位置,如果不存在返回0.
示例代码:
select
company_id
,tag_manage
,get_json_object(tag_manage,'$.SERVICE_PROMISE')
,get_json_object(tag_manage,'$.SERVICE_PROMISE[0]')
,instr(get_json_object(tag_manage,'$.SERVICE_PROMISE'),'111')
from XXX
where
XXX
结果:
嗯,到这里需求结束啦。