Как получить доступ к элементам (ключам) массива json, значениям в типе вложенного словаря json с помощью postgresql?

У меня есть вложенная структура json. Как извлечь определенные элементы (ключи) и значения?

Как получить доступ к "sky: sell": "1" или "U1":"0000"? Я пробовал json_object_keys и json_array_elements для извлечения массива. Но я точно не знаю, как это сделать. Пример кода:

Таблица - запись и имя столбца: отчет

      {

  "PIname": {

    "n1": "x1",

                "n2": "x2",

                "params": {

                "S1": {

        "code1": "y1",

        "Code2": "y2",

      },

      "id": "2d",

      "Dest": {

        "Code3": "mi"

      }

    },

                "PIDataArea": {

                "m1": null,

      "PInven": {

        "head": {

          "Code4": "Increase",

          "line": "2020-01"

        },

                                "PILine": [

          {

            "u1": "0000",

            "u2": "0",

            "u3": "1",

            "modes": {

              "@cID": "Sng",

              "#txt": "12.21"

            }                                               },
                                               {
            "Qualify": ".0001",

            "QOrder": "1",

            "UPriceAmt": {

              "@cID": "sng",

              "#txt": "13"                                              },

            "sky:Qa": ".000",

            "sky:Partcode": {

              "@c1ID": "a"   

            },

            "sky:SCode": "Ni",

            "sky:PItem": {

              "sky:ID": "h"   

            },

            "sky:Forest": {

              "sky:q1": [

                {

                  "sky:selling": "1"
                }

                {

                  "sky:selling": "0"  

                }
         ]

          }                                            }                                                }}  }}

Я пробовал много, один пример запроса здесь, например, Выберите * из записи r Где существует (выберите отчет ->'sky: sales' из json_each(r.report) b, где b.value->>'sky: sales' Ilike '0');

1 ответ

Вы можете использовать json_path_query или jsonb_path_queryфункция. Пример извлечения элемента с ключом = "небо: продажа":

      json_path_query(r.report, $.** ? (@.key == 'sky:selling'))
Другие вопросы по тегам