Hive數(shù)組嵌套JSON如何取需要的數(shù)據(jù)

數(shù)據(jù)大致格式如下,需求:
求當(dāng)前公司等于P的角色(JSON中的R字段)

company_name case_role
江蘇XXXX集團(tuán)有限公司 [{"P":"張三","R":"申請(qǐng)執(zhí)行人","ShowName":"張三","N":"","O":-2},{"P":"江蘇XXXX集團(tuán)有限公司","R":"被執(zhí)行人","ShowName":"江蘇XXXX集團(tuán)有限公司","N":"00300fef44ee8d7cee7aa43ba0def3c8","O":0}]

case_role格式化后

[{
    "P": "張三",
    "R": "申請(qǐng)執(zhí)行人",
    "ShowName": "張三",
    "N": "",
    "O": -2
}, {
    "P": "江蘇XXXX集團(tuán)有限公司",
    "R": "被執(zhí)行人",
    "ShowName": "江蘇XXXX集團(tuán)有限公司",
    "N": "00300fef44ee8d7cee7aa43ba0def3c8",
    "O": 0
}]

要實(shí)現(xiàn)需求必須JSON與JSON之間能夠切割,但是目前JSON間是逗號(hào)不能直接Split(case_role,','),將case_role轉(zhuǎn)成

{
    "P": "張三",
    "R": "申請(qǐng)執(zhí)行人",
    "ShowName": "張三",
    "N": "",
    "O": -2
}; {
    "P": "江蘇XXXX集團(tuán)有限公司",
    "R": "被執(zhí)行人",
    "ShowName": "江蘇XXXX集團(tuán)有限公司",
    "N": "00300fef44ee8d7cee7aa43ba0def3c8",
    "O": 0
}

這樣進(jìn)行Split(case_role,';')后使用get_json_object取對(duì)應(yīng)字段即可

第一步轉(zhuǎn)換:

explode(split(regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;'))  as case_role 
regexp_replace(case_role, '\\[|\\]','')去掉[]
regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{')
將JSON間的逗號(hào)替換成;

第二步取值

get_json_object(a.case_role,'$.R') as case_role

最終SQL

select
    a.company_name
    ,get_json_object(a.case_role,'$.R') as case_role
from
(
    SELECT 
        ,company_name
        ,explode(split(regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;'))  as case_role 
    FROM qcc
) a
WHERE get_json_object(a.case_role,'$.P')=a.company_name

當(dāng)然也可以使用正則,能解決問(wèn)題就好

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容