Хотя [1,2,3]
действительно JSON , как указано в комментариях zerkms , для ответа на основной вопрос: Есть ли разница между JSON и строкой?
Ответ - да. Весь новый набор операций, функций и т. Д. Применяется к столбцам json
или jsonb
, которые не применяются к столбцам text
(или связанным типам).
Например, в то время как для столбцов text
вам потребуется использовать регулярные выражения и связанные строковые функции для анализа строки (или пользовательской функции), для json
или jsonb
существует отдельный набор запросов. операторы, которые работают в структурированной природе JSON .
Из Postgres doc , с учетом следующего JSON :
{
"guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
"name": "Angela Barton",
"is_active": true,
"company": "Magnafone",
"address": "178 Howard Place, Gulf, Washington, 702",
"registered": "2009-11-07T08:53:22 +08:00",
"latitude": 19.793713,
"longitude": 86.513373,
"tags": [
"enim",
"aliquip",
"qui"
]
}
Док тогда говорит:
Мы храним эти документы в таблице с именем api, в столбце jsonb с именем
JDoc. Если для этого столбца создается индекс GIN, запросы, такие как
следующие могут использовать индекс:
-- Find documents in which the key "company" has value "Magnafone"
SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @> '{"company": "Magnafone"}';
Это позволяет запрашивать поля jsonb
(или json
) совсем иначе, чем если бы это было просто text
или связанное поле.
Вот некоторые Postgres doc , которые предоставляют некоторые из этих операторов и функций запросов.
В основном, если у вас есть JSON данные, которые вы хотите обработать как JSON данные, тогда столбец лучше всего указать как json
или jsonb
(какой вы выберете зависит от того, хотите ли вы сохранить его как обычный текст или двоичный файл, соответственно).