Вопрос по sql, postgresql, json – Вывод JSON в Postgresql

8

Я надеюсь, что я не пропускаю что-то очень очевидное здесь,
Я хочу получить вывод JSON из функции postgres (я полагаю, что многим другим это уже было нужно), и я буду рад установить на свой сервер расширение contrib-функций,

Есть ли способ получить вывод JSON из функций sql или plpgsql (или с помощью Python на стороне сервера базы данных)? В частности, я хочу получить мойrecord[] результаты в формате JSON.

Ваш Ответ

4   ответа
2

plpython плагин, безусловно, позволяет вам сделать это с помощьюpython JSON библиотека.

Вы можете сделать что-то вроде этого:

CREATE OR REPLACE FUNCTION myschema.tojsonfunc()
AS $$    

   import json;
   jsonStr = json.dumps(myrecord)

$$ LANGUAGE plpythonu;
Спасибо, проблема в том, что результаты SQL-запросов (записи AKA) не являются сериализуемыми SQL, как они есть, кому-то нужно время, чтобы "очистить" чтобы они соответствовали, и если бы я хотел это сделать, я бы лучше сделал это в моем реальном коде на python, и не стал бы загружать этим плохой db-сервер. Ali
7

Существует встроенная поддержка JSON, так какPostgreSQL 9.2 и он увеличился со многими другими функциями в более поздних версиях (например:JSON-функции в PostgreSQL 0.4).

Особенноrow_to_json преобразует запись в объект JSON иarray_to_json превращает массивы в массивы JSON.

Например, обе функции могут быть объединены, чтобы легко повернуть результатыSELECT запрос в JSON:

SELECT array_to_json(array_agg(row_to_json(t))) FROM 
    (SELECT col1, col2, col3 FROM example_table) t
Вы проверили примеры в первой ссылке? Есть функцииquery_to_json(), array_to_json() а такжеrecord_to_json() которые принимают входные данные в соответствии с их именами и превращают его в JSON.
Пожалуйста, обновите свой ответ соответствующими частями решения и обновите ссылки, так как они устарели.
Насколько я понимаю, это поддержка типа JSON, который содержит формат jsontext и проверяет его, он не производит вывод JSON. Ali
Первые 2 ссылки мертвы. Вот почему рекомендации по ответам StackOverflow рекомендуют нам:quote the relevant portion from a link.
Вы правы, я пропустилrow_to_json функция, это может решить мою проблему, спасибо. Ali
4

использованиеrecord_to_json (...) с 9.2, теперь доступноперенесен на 9.1.

Ни один из них на самом деле не работает.
Ваша обратная ссылка isnowork :(
2

На сервере установите:
sudo apt-get install postgresql-plpython-9.4

Затем на вашем сервере Postgres:

CREATE EXTENSION IF NOT EXISTS plpythonu;
CREATE LANGUAGE plpythonu;

CREATE OR REPLACE FUNCTION prettyprint_json(data text)
 RETURNS json
 AS $$
    import json
    return json.dumps(json.loads(data), indent=4)
 $$ LANGUAGE plpythonu;

Похожие вопросы