我在Presto 0.273上,我有一个复杂的JSON数据,我只想从中提取特定的值。
首先,我运行了SELECT JSON_EXTRACT(library_data, '.$books')
,它把所有的书都从某个图书馆拿来。问题是,这将返回如下所示的JSON对象数组:
[{
"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”错误。
谁能给我指出正确的方向吗?
发布于 2022-06-08 10:20:39
转换为array(json)
SELECT CAST(JSON_EXTRACT(library_data, '.$books') as array(json))
或者您也可以在unnest
中使用它将其压平成行:
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)
https://stackoverflow.com/questions/72543400
复制相似问题