Получение данных в объекте SQL JSON и массиве - PullRequest
0 голосов
/ 17 июня 2020

У меня есть данные, отформатированные следующим образом в столбце с именем value:

{"данные": ["AVM": "1000", "location": "CA"]}

Я пытаюсь написать простой запрос SQL для извлечения значений AVM для всего набора данных, хранящегося в базе данных postgresql, что составляет пару тысяч записей.

Кто-нибудь знает элегантное решение для уметь это сделать?

выберите p. "value" -> 'data' из таблицы как p;

Но не может копаться в массиве, чтобы получить значения AVM.

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

То, что вы ищете, - это запрос, похожий на этот

SELECT JSON_VALUE(value, '$.data.AMV') 
FROM {tableName}

Вы также можете фильтровать данные:

SELECT JSON_VALUE(value, '$.data.AMV') 
FROM {tableName}
WHERE JSON_VALUE(value, '$.data.location') = 'CA'

Подробнее здесь

0 голосов
/ 18 июня 2020

Мне удалось выполнить запрос, используя следующее в Postgre базе данных:

select (t.value -> 'data' - >> 0) :: json -> 'AVM 'как "AVM" из таблицы как t;

Общий формат для псевдокода.

0 голосов
/ 17 июня 2020

Если вы попробуете ввести значение, как написано:

select '{ data: [ "AVM": "1,000", "location": "CA" ] }'::json;
ERROR:  invalid input syntax for type json
LINE 1: select '{ data: [ "AVM": "1,000", "location": "CA" ] }'::jso...

Предполагая, что данные являются YAML, вы можете извлечь их из базы данных и использовать анализатор YAML для получения данных. Пример в Python (https://pyyaml.org/):

import yaml
y_str = '{ "data" : [ "AVM": "1,000", "location": "CA" ] }' 
y_dict = yaml.safe_load(y_str)  
y_dict                                                                                                                                                                     
{'data': [{'AVM': '1,000'}, {'location': 'CA'}]}
y_dict["data"][0]["AVM"]                                                                                                                                                   
'1,000'

Если у вас установлен plpythonu or plpython3u в базе данных, вы можете написать функцию, которая делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...