2016-11-18 66 views
0

我想写一个红移UDF与Python返回一个JSON对象的键:测试它只能在对象返回的最后一个键的功能时红移UDF - 返回JSON键

create or replace function json_keys (j varchar(max)) 
    returns varchar(max) 
    stable as $$ 
     import json 
     arr = json.loads(j) 
     for key in arr.keys(): 
     return str(key) 
    $$ language plpythonu; 

然而键即

select json_keys('{"key1": "value1", "key2": "value2","key3": "value3"}') -- returns key3 only 

我需要改变什么才能让它返回key1,key2和key3?

回答

1

Loop返回最后一项。结帐这个。

create or replace function json_keys (j varchar(max)) 
returns varchar(max) 
stable as $$ 
    import json 
    arr = json.loads(j) 
    return '' if not arr else ','.join(arr.keys()) 
$$ language plpythonu; 

select json_keys('{"key1": "value1", "key2": "value2","key3": "value3"}') 
+0

This Works,thanks @kadalamittai!有趣的是,它默认以相反的顺序返回键。按照外观顺序排列数组的最佳方法是什么?我以为我可以在声明arr后执行'arr = sorted(arr)',但是这样做不能编译。 – fez

+0

你必须做排序(arr.keys()) – kadalamittai