首页 > 解决方案 > 解析 JSON 列值

问题描述

我正在尝试从名为 Json_table 的表中解析一个 json 列,该表具有 2 种不同类型的元素,

keyfield  |  json_column | SomeotherField1 | SomeotherField2
----------------------------------------------------------------
keyfield1, | {"jField1":"Value1", ..."jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}] | someothervalue | someothervalue

使用 get_json_object 函数,我可以轻松访问 jField1 到 jField10 和 MapField。但我不知道如何将 MapField 解析为更多单独的列。

SELECT keyfield, get_json_object(json_column, '$.jField1') as jField1, get_json_object(json_column, '$.jField2') as jField2
FROM Json_table

我需要编写可以为我提供这样的结果的查询

Select Keyfield, jField1, jField2, .. , jField10, Key1, Key2 From Json_table
result as:

keyfield1 | Value1 | ... | Value10 | Keyvalue1 | Keyvalue2

我想从“Mapfield”部分中获取所有单个元素。

标签: jsondictionaryhive

解决方案


您可以MapField通过索引访问数组,$.MapField[0].Value, $.MapField[1].Value

with cte as (
select string('{"jField1":"Value1","jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}]}')as jsn_col) 
select get_json_object(jsn_col,'$.jField1')jField1,
get_json_object(jsn_col,'$.MapField[0].Value')key1,
get_json_object(jsn_col,'$.MapField[1].Value')key2 from cte;

+-------+---------+---------+
|jField1|key1     |key2     |
+-------+---------+---------+
|Value1 |Keyvalue1|Keyvalue2|
+-------+---------+---------+

推荐阅读