我有一个存储 JSON 格式字符串的数据库列。字符串本身包含多个元素,如数组。每个元素包含多个键值对。一些值也可能包含多个键值对,例如下面的“地址”属性。
[{"name":"abc",
"address":{"street":"str1", "city":"c1"},
"phone":"1234567"
},
{"name":"def",
"address":{"street":"str2", "city":"c1"},
"phone":"7145895"
}
]
我的最终目标是获取 JSON 字符串中每个字段的单个值。我可能会使用 explode() 来做到这一点,但 explode() 需要将数组传递给它,而不是字符串。所以我的第一个目标是将 JSON 字符串转换为数组。有人可以让我知道该怎么做吗?非常感谢。
最佳答案
你可以从这个开始:
select concat(‘{“name”’,data_json) from your_table q1 --re-construct your json
lateral view explode(split(json_data,’{“name”’)) json_splits as data_json --split json at each {"name" tag into array and then explode
注意:我的代码未经过测试,因为我目前无权访问配置单元。这绝对应该给你一个好的开始,或者你总是可以使用 Hive SerDe for JSON com.cloudera.hive.serde.JSONSerDe
关于json - HIVE中将JSON格式String转成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39732987/