首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSON格式字符串转换为配置单元中的数组

将JSON格式字符串转换为配置单元中的数组
EN

Stack Overflow用户
提问于 2016-09-28 03:38:52
回答 2查看 6.3K关注 0票数 3

我有一个存储JSON格式字符串的数据库列。字符串本身包含多个元素,如数组。每个元素包含多个键值对。一些值还可以包含多个键值对,例如,下面的"address“属性。

代码语言:javascript
运行
复制
[{"name":"abc", 
  "address":{"street":"str1", "city":"c1"},
  "phone":"1234567"
 },
 {"name":"def", 
  "address":{"street":"str2", "city":"c1"},
  "phone":"7145895"
 }
]

我的最终目标是获得JSON字符串中每个字段的单个值。我可能会使用explode()来做这件事,但是explode()需要将数组传递给它,而不是字符串。因此,我的第一个目标是将JSON字符串转换为数组。有没有人能告诉我怎么做?非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2016-09-28 10:29:48

您可以从以下内容开始:

代码语言:javascript
运行
复制
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的权限。这绝对会给你一个好的开始,或者你可以一直使用JSON com.cloudera.hive.serde.JSONSerDe的Hive SerDe

票数 1
EN

Stack Overflow用户

发布于 2016-09-28 12:52:30

正如@ruben123所建议的,特别是当你的JSON很复杂的时候,可以使用json的Hive SerDe。有几个可用的JSONSerDe,例如。com.cloudera.hive.serde.JSONSerDeorg.openx.data.jsonserde.JsonSerDe link

确保json格式正确,一行json对应一条记录。所以,你的json应该是:

代码语言:javascript
运行
复制
{"name":"abc", "address":{"street":"str1", "city":"c1"}, "phone":"1234567"}
{"name":"def", "address":{"street":"str2", "city":"c1"}, "phone":"7145895"} 

创建配置单元表:

代码语言:javascript
运行
复制
CREATE TABLE sample_json (
   name STRING,
   address STRUCT<
     street: STRING,
     city: STRING>,
   phone INT )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/your/hdfs/directory';

要选择访问字段,只需

代码语言:javascript
运行
复制
select name, address.street, address.city, phone from sample_json;

abc   str1  c1  1234567
def   str2  c1  7145895

注意:如果尚未安装JSONSerDe,则必须运行ADD JAR

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39732987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档