2014-01-17 4 views
4

Как я могу преобразовать Postgresql сохраненной JSON этой формыPostgresql от Json объекта в массив

{"Kategorie": [{"ID": "environment", "ID": "economy"}]} 

, чтобы [ «окружающую среду», «экономика»] только с помощью Postgresqls JSon приправленного синтаксиса. Массив в сохраненном источнике имеет здесь два элемента, но может содержать больше (или только один). И полученный массив должен привести ко всем элементам значения.

+0

Вы пробовали какие-либо подходы к этому типу преобразования? – summea

+0

Честно говоря, нет, поскольку я не знаю, возможно ли это. – JohnDoe

+0

Это недействительно JSON. Вы не можете иметь объект с тем же ключом. Возможно, вы имели в виду '{" Kategorie ": [{" ID ":" environment "}, {" ID ":" economy "}]}'? –

ответ

2

Это может дать вам то, чтобы работать с:

SELECT ARRAY(select json_extract_path_text(x, 'ID') from 
    json_array_elements(
     '{"Kategorie": [{"ID": "environment"}, {"ID": "economy"}]}'::json->'Kategorie') 
    as x) 

Результат представляет собой текстовый массив:

{environment,economy}

Вполне возможно, что есть более чистый способ сделать это :)

JSON operators documentation имеет информацию. (Это только 9.3+, 9.2 было очень мало функций полезности.)

+0

Это работает, выберите json_extract_path (json_array_elements (категория #> '{Kategorie}'), 'ID') из набора данных, но даст мне несколько строк для каждой строки источника. Как вы предположили, Array() должен это сделать, но когда я завершаю его в select array (....), я получаю ошибку синтаксиса ошибки на уровне «json_extract_path» или рядом с ним. Это действительно странно – JohnDoe

+0

Итак, это, наконец, делает то, что я хочу: выберите to_json (array (выберите json_extract_path (json_array_elements (категория #> '{Kategorie}'), 'ID'))) из набора данных – JohnDoe

Смежные вопросы