получить тег с помощью запроса json или jsonb - PullRequest
0 голосов
/ 20 мая 2019

Я использую PostgreSQL 11. Я пытаюсь получить тег "wmnote" из этого json (это фрагмент, необходимо закрыть метки): {

"order": [
    {
        "notes": {
            "note": []
        },
        "onHold": "false",
        "wmnotes": {
            "wmnote": []
        },
        "invoices": {
            "invoiceDetail": []
        },
        "confirmed": "true",
        "enteredBy": "",
        "entryType": "",
        "orderType": "DTC",
        "orderEvent": "Update",
        "orderLines": {
            "orderLine": [
                {
                    "notes": {
                        "note": []
                    },
                    "isGift": "false",
                    "itemID": "4027956",
                    "onHold": "false",
                    "wmnotes": {
                        "wmnote": [
                            {
                                "noteSeq": "1",
                                "noteCode": "",
                                "noteType": "DDate",
                                "visibility": "0",
                                "commentText": "02/07/2019"
                            }

Это мой запрос:

select o.info->>'order'-> 'orderLines'->'wmnotes'->'wmnote'
            from customer_orders o
            where o.order_id = 1;

Но результат равен нулю.

Информация об имени столбца является типом данных jsonb.

Они могли бы помочь мне с построением запроса !!

1 Ответ

0 голосов
/ 20 мая 2019

Три пункта:

  1. ->> выдает текст, не являющийся типом JSON.Таким образом, вы не сможете работать с результатом в виде объекта JSON.Вместо этого используйте ->, как вы делали со всеми последующими шагами
  2. order содержит массив.Таким образом, вы должны указать, какой элемент массива вы ищете.Если вы хотите найти первый элемент, вам нужно вызвать "order" -> 0 -> "orderlines" (обратите внимание, что массивы JSON основаны на нуле!)
  3. orderline также содержит массив.См. Пункт 2.

Таким образом, ваш запрос должен выглядеть следующим образом:

SELECT o.info->'order'->0 -> 'orderLines' -> 'orderLine' -> 0 -> 'wmnotes'->'wmnote'
FROM customer_orders o

demo: db <> fiddle

...