stringify/ приведение jsonb к строке с надежным пробелом для хэша в postgresql, аналогичном JSON.stringify

Я хочу создать функцию хеширования для полей jsonb, но мне нужно контролировать приведение к строке, чтобы обеспечить целостность клиента и сервера. Другими словами, я хотел бы структурировать JSON как на клиенте, так и на сервере с одинаковым интервалом и отступом.

Например, этот запрос:

SELECT '{"tags":["tag1","tag2"],"c":1}' ::JSONB ::TEXT

вернусь:

{"c": 1, "tags": ["tag1", "tag2"]}

Теперь, кроме заказа ключей (что идеально), вот интересная часть. Ставит пробелы после двоеточия (:), по сравнению с JSON.stringify на клиенте:

{"tags":["tag1","tag2"],"c":1}

Обратите внимание, что после двоеточия нет пробелов. Заказ ключей можно сделать с помощью чего-то вроде json-stable-stringify,

В идеале мы можем контролировать вывод на сервере... Я нашел в исходном коде функцию, которая выглядит так, как будто она используется для приведения JSONB к строке: функция JsonbToCString который возвращает JsonbToCStringWorkerи, похоже, есть аргументы для управления интервалами и отступами https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/jsonb.c#L430

Есть ли в любом случае выставить эти методы аналогично тому, как вы можете вызывать функции в psql? Что-то вроде SELECT json_to_string( ..., indent ), Я счастлив использовать ::TEXT метод приведения, но похоже, что строковое кодирование немного жестко запрограммировано, и я не могу передать опции отступа.

Заранее спасибо за помощь!

0 ответов

Другие вопросы по тегам