1. 程式人生 > 實用技巧 >hive解析json陣列問題

hive解析json陣列問題

問題描述:json陣列中存在特殊字元,無法 利用split切分陣列元素。
解決思路:(1)自定義udtf;(2)利用spark-sql

一般的場景:json字串一個array, array中有幾個網址如www.cnblogs.com等。
解決方法如下:

--- [{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]
select explode(
  split(
    regexp_replace(
      regexp_replace('[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]', '[\\]\\[]','')
      ,'\\}\\,\\{','\\}\\;\\{')
    ,'\\;')
) lfo

split這種方式處理json存在破壞json完整性,穩妥的辦法是全程利用json的方法

# url_arr = '[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]'
df.select('some_col', 
	explode(from_json('url_arr', ArrayType(StringType())))
).toDF('some_col','url_json')

輸出結果:
{"url":"www.cnblogs.com","title":"cnblogs"}
{"url":"www.example.com","title":"example"}