【问题标题】:Redshift UDF - Returning JSON keysRedshift UDF - 返回 JSON 键
【发布时间】:2016-11-18 10:36:32
【问题描述】:

我正在尝试使用 Python 编写 Redshift 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?

【问题讨论】:

    标签: python json amazon-redshift


    【解决方案1】:

    循环返回最后一项。签出这个。

    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"}')
    

    【讨论】:

    • 这行得通,谢谢@kadalamittai!有趣的是,默认情况下它以相反的顺序返回键。按出现顺序对数组进行排序的最佳方法是什么?我原以为我可以在声明 arr 后执行 arr = sorted(arr) 但这无法编译。
    • 你必须做 sorted(arr.keys())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多