如果我使用不正确的术语,请提前表示道歉,我对JSON相对较新。我正在查询来自Amazon Redshift的数据。
以下是我看到的JSON数据示例:
{" id":{"姓名":[" name1"," name2"," name3" ]
我想获取包含名称的对象(最多可以包含15个名称)。通常情况下,这样做没有任何障碍:
选择json_extract_path_text(列,' id','名称')
但是,在这种情况下,我遇到了麻烦。 " id"是一个可变数字......它实际上是一个客户ID号。这意味着ID在每种情况下都会有所不同,因此一行可能包含:{" 12345":{"姓名":[" Lisa"," Dave"," Sean" ]
而下一行可能包含:
{" 6789":{"姓名":[" Phil"," Jenny"]
Redshift支持的JSON功能尚未解决。我怎样才能获得"名称"每次路径元素不同时的对象?
答案 0 :(得分:0)
您可以尝试使用Redshift用户定义函数(UDFS)。简单,易于测试和管理这样的要求。可以改进UDF以支持不同的参数和的信息。
CREATE FUNCTION dynamic_json_extract_path_text (txt VARCHAR(20000) ) RETURNS VARCHAR(20000) IMMUTABLE AS $$
import json
try:
data = json.loads(txt)
for d in data:
return json.dumps(data[d]['names'])
return ''
except:
return ''
$$ LANGUAGE plpythonu;