早上好

PostgreSQL版本12.17

我有一个名为"design"的列,其中包含JSON数组数据.

column

此列中存储的JSON格式如下:

{
    "objectVersion": 0,
    "design": [
        {
            "setNumber": true,
            "objectVersion": 0,
            "type": "RULE_PART",
            "number": 0,
            "operator": "EQUAL",
            "left": {
                "objectVersion": 0,
                "type": "RESOLVED",
                "value": "94068ff0-e73e-4f99-9f66-7025bf14ffb4.Ce6188690-7495-4bd0-a9c6-91ef98acb64a",
                "resolverType": "FORM",
                "_type": "RulePartOperand"
            },
            "right": {
                "objectVersion": 0,
                "type": "LITERAL",
                "value": "N",
                "resolverType": null,
                "_type": "RulePartOperand"
            },
            "combine": "AND",
            "subParts": [],
            "_type": "RulePart"
        },
        {
            "setNumber": true,
            "objectVersion": 0,
            "type": "RULE_PART",
            "number": 1,
            "operator": "EQUAL",
            "left": {
                "objectVersion": 0,
                "type": "RESOLVED",
                "value": "94068ff0-e73e-4f99-9f66-7025bf14ffb4.C292d1bbe-cfc0-4736-a164-70882714cbf0",
                "resolverType": "FORM",
                "_type": "RulePartOperand"
            },
            "right": {
                "objectVersion": 0,
                "type": "LITERAL",
                "value": "Y",
                "resolverType": null,
                "_type": "RulePartOperand"
            },
            "combine": "OR",
            "subParts": [],
            "_type": "RulePart"
        }
    ]
}

我想从"left"检索与"Value"相关的数据:

value

当我使用以下(json_array_elements)时:

select json_array_elements(design::json -> 'design') 
from public.rule_definition where  definition_id = 'some id'

我有:

Elements

然而,我很难理解如何检索单个元素,IE,"值"字段.

正如你可能已经猜到的,我以前没有使用PostgreSQL,因此,我真的很感激你可能有任何见解,这将帮助我向前迈进. 谢谢大家

推荐答案

继续沿着路径向下走,与从顶层向下走到design的方式相同,使用相同的->操作符:demo

select json_array_elements(design::json -> 'design')->'left'->'value'
from public.rule_definition where  definition_id = 'some id'
?column?
"94068ff0-e73e-4f99-9f66-7025bf14ffb4.Ce6188690-7495-4bd0-a9c6-91ef98acb64a"
"94068ff0-e73e-4f99-9f66-7025bf14ffb4.C292d1bbe-cfc0-4736-a164-70882714cbf0"

PostgreSQL 12也支持JSONPath expressions,如果你使用jsonb而不是json:

select jsonb_path_query(design::jsonb, '$.design[*].left.value')
from public.rule_definition where  definition_id = 'some id'

请注意,这两种方法都产生了json/jsonb,因此值中的引号.如果你想检索一个文本,并可能将其转换为其他类型,你需要将最后->切换到->>:

select json_array_elements(design::json -> 'design')->'left'->>'value'
from public.rule_definition where  definition_id = 'some id';

如果是jsonb_path_query(),你需要用#>>'{}'打开jsonb:

select jsonb_path_query(design::jsonb, '$.design[*].left.value')#>>'{}'
from public.rule_definition where  definition_id = 'some id'

Json相关问答推荐

嵌套自定义解组

无法从JSON解析ZonedDateTime,但可以使用格式化程序很好地解析

使用快速json库编写json可以消除所有缩进

Jolt 规范将父对象中的所有键应用于数组中的所有对象

jq :遍历 json 并在键存在时检索集合

如何将 JSON 文本作为参数传递给 powershell?

ETCD 导出为 json 并从 base64 解码所有键/值到人类可读

如何 Select 一个值,这是可选的 - 使用 jq

JOLT 获取带有动态键的数组

Scala - 在构建 Json 时无法删除 Key -> value "{}" 大括号的双引号

PowerShell:如何将哈希表输出为 json 并使用 foreach 循环将其存储在变量中?

Kotlin Android Room 处理 Moshi TypeConverter 中的空对象列表

我无法在 Go - Gin 中解析日期/时间

UTF-8 字符编码之战 json_encode()

使用 c# 通用地展平 Json

Select 什么数据类型json或者jsonb或者text

jQuery.getJSON 和 jQuery.parseJSON 返回 [object Object]?

如何将有向无环图 (DAG) 存储为 JSON?

jQuery JSON 响应总是触发 ParseError

从 VS 2017 Azure Function 开发中的 local.settings.json 读取值