我需要将 JSON 解析为 Greenplum

Posted

技术标签:

【中文标题】我需要将 JSON 解析为 Greenplum【英文标题】:I need parse JSON to Greenplum 【发布时间】:2020-12-27 09:09:51 【问题描述】:

如何解析 JSON


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

到Greenplum表,格式化1键1值?

【问题讨论】:

欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理并阅读How to Ask 或如何提高问题的质量。然后编辑您的问题,以包含您作为minimal reproducible example 的完整源代码,其他人可以对其进行编译和测试。 【参考方案1】:

在您的基本示例中,没有 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 值字段的函数。

【讨论】:

SELECT j->>'key' AS Key, json_array_elements(j->'value')->>0 AS Value FROM json_path_query ('/Users/ternik/Downloads/data.json', '$.keyvalue()') AS j; SQL 错误 [42883]:错误:函数 json_path_query(unknown, unknown) 不存在没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。 '/Users/ternik/Downloads/data.json' 未被 PostgreSQL 识别为 json 对象。您应该手动将 data.json 文件的内容复制并粘贴到此位置,将其放在单引号之间,然后在 :: json 之后添加,或者您应该将 data.json 文件的内容导入 postgres 表中使用命令COPY FROM,然后在 json_path_query 函数中引用该表的 json 列

以上是关于我需要将 JSON 解析为 Greenplum的主要内容,如果未能解决你的问题,请参考以下文章

将 Json 解析为 Java 对象

将 JSON 解析为 Excel - LOOP

如何将 JSON 字符串解析为 ListView?

将 XML 数据解析为 JSON

如何将字符串转换为 JSON,以便我可以将其解析为对象

如何将 JSON 数据解析为 ListView