首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Presto从JSON元素数组中提取字符串

Presto从JSON元素数组中提取字符串
EN

Stack Overflow用户
提问于 2022-06-08 09:39:12
回答 1查看 725关注 0票数 0

我在Presto 0.273上,我有一个复杂的JSON数据,我只想从中提取特定的值。

首先,我运行了SELECT JSON_EXTRACT(library_data, '.$books'),它把所有的书都从某个图书馆拿来。问题是,这将返回如下所示的JSON对象数组:

代码语言:javascript
运行
复制
[{
  "book_name":"abc", 
  "book_size":"453",
  "requestor":"27657899462"
  "comments":"this is a comment"
}, {
  "book_name":"def", 
  "book_size":"354",
  "requestor":"67657496274"
  "comments":"this is a comment"
}, ...
]

我希望代码只返回JSON对象的列表,而不是数组。我的目的是以后能够遍历JSON对象,从特定的请求程序中找到对象。目前,当我使用python循环遍历给定的数组时,会发现围绕这些数据的一系列错误是一个Series,因此试图正确地提取它。

我尝试了这个SELECT JSON_EXTRACT(JSON_EXTRACT(data, '$.domains'), '$[0]'),但这不起作用,因为不知道所需对象的索引位置。

我也尝试过SELECT array_join(array[books], ', '),但是获得了“将数组元素转换为VARCHAR”错误。

谁能给我指出正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-08 10:20:39

转换为array(json)

代码语言:javascript
运行
复制
SELECT CAST(JSON_EXTRACT(library_data, '.$books') as array(json))

或者您也可以在unnest中使用它将其压平成行:

代码语言:javascript
运行
复制
SELECT *, 
    js_obj -- will contain single json object
FROM table
CROSS JOIN UNNEST CAST(JSON_EXTRACT(library_data, '.$books') as array(json)) as t(js_obj)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72543400

复制
相关文章

相似问题

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