解析json数组的函数通常有
- get_json_object()
- json_tuple()
- split()
- explode()
- regexp_replace()
- lateral view
get_json_object() 一次只能解析一个key,当需要解析多个字段时,不好用
于是使用 json_tuple() 函数,结合lateral view() 使用
一个解析json数组的思路:
对于如下的字段,其中内容是
[{"website":"baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]
思路如下:
1. 先用 regexp_replace('[ ...]' , ' \\[ | \\] ' , ' ' ) 来去掉数组两边的中括号
2. 再用 regexp_replace(1的结果, '\\}\\,\\{' , '\\}\\;\\{' ) 将json数组元素之间的逗号换成分号,以便后面使用split()分隔
3. 使用split(2的结果, ’\\;‘) 按分号切割元素
4. explode(3的结果)
将上述4步作为一个子查询,外面套一个lateral view形成侧写表。注意:当有多个explode()时,用多个 lateral view 形成多个侧写表,解决遇到UDTF时,select 只支持一个字段的问题