我需要将 JSON 解析为 Greenplum

问题描述

如何解析 JSON

{
"35673": [
        "234","357","123"
    ],"34566": [
        "333","456","789"
    ]
}

到Greenplum表,格式1键1值?

enter image description here

解决方法

在您的基本示例中,没有 json 嵌套对象,没有 json 对象数组,并且所有对象值都是字符串数组。因此,在这些假设中,您可以将 json_path_query 函数与 jsonpath 运算符 keyvalue() 一起使用,以便将 json 对象拆分为一组键/值,然后使用 json_array_elements 函数,以便拆分结果值,这些值系统地为一维数组:

SELECT j->>'key' AS Key,json_array_elements(j->'value')->>0 AS Value
FROM json_path_query (your_json_object_here,'$.keyvalue()') AS j

您的示例的输出是:

Key     Value     
34566   333
34566   456
34566   789
35673   234
35673   357
35673   123

所有这些功能都可以应用于 jsonb 类型,它比 json 类型更受欢迎,参见 manual :

"json 和 jsonb 数据类型接受几乎相同的一组值作为输入。主要的实际区别是效率之一。 json 数据类型存储输入文本的精确副本,其中 处理函数必须在每次执行时重新解析;而jsonb数据 以分解的二进制格式存储,使其速度稍慢 由于增加的转换开销而输入,但明显更快 过程,因为不需要重新解析。 jsonb 也支持索引, 这可能是一个显着的优势。”

如果您的 json 结构与嵌套对象或对象数组更复杂,您将不得不调整 FROM 子句中的函数。 如果您的对象值不是系统的字符串数组,您将不得不调整应用于生成的 json 值字段的函数。