#json #postgresql
Вопрос:
Вот пример значения строки
CREATION_DATE: 2021-08-30
USER_EMAIL: 'jack@sample.com
ACTION: 'FileAccessedExtended'
AUDITDATA:
{
"OrganizationId":"orgid1231231",
"RecordType":6,
"UserKey":"i:0h.f|membership|10032000de9e9feb@live.com",
"UserType":0,
"Version":1,
"Workload":"SharePoint",
"ClientIP":"11.11.11.11",
"ObjectId":"https://someorganization.sharepoint.com/sites/MondayMeetings862/Shared Documents/folder/folders/somefolder/Contact Database/Investment Contact Database (MASTER) 1.xlsx",
"UserId":"jack@sample.com",
"CorrelationId":"12-031-23809123809172309",
"EventSource":"SharePoint",
"ItemType":"File",
"ListId":"334b5378-2a4c-4ba6-b1ac-1ccb51a38687",
"ListItemUniqueId":"a46a8f64-0ecf-415b-b372-32852c160d74",
"Site":"2839182391823819238192389",
"UserAgent":"MSOCS",
"WebId":"1092301723729813",
"HighPriorityMediaProcessing":false,
"SourceFileExtension":"xlsx",
"SiteUrl":"https://someorganization.sharepoint.com/sites/MondayMeetings862/",
"SourceFileName":"Investment Contact Database (MASTER) 1.xlsx",
"SourceRelativeUrl":"Shared Documents/folder/folders/COMMERCIAL/Contact Database"
}
Желаемый результат:
CREATION_DATE: 2021-08-30
USER_EMAIL: Jack@sample.com
ACTION: File Access Extended
CLIENTIP: 11.11.11.11
Комментарии:
1. По-моему, это похоже на json.
2. Боже мой … — _ _ — еще работа.
3. Какой тип данных является столбцом
auditdata
?4. @ThomasWard: В Postgres есть множество функций для работы со значениями JSON
5. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Предполагая auditdata
, что это столбец типа jsonb
(или, по крайней мере json
), вы можете использовать ->>
оператор для извлечения из него значения:
select creation_date, user_email, action,
auditdata ->> 'ClientIP' as client_ip
from the_table;
Если по какой-то причине столбец правильно определен как a jsonb
(или, по крайней мере json
), вам нужно привести значение auditdata::jsonb ->> 'ClientIP'
Комментарии:
1. Большое вам спасибо, эта штука работала как заклинание, просто нужно было преобразовать тип данных в json… работает как по волшебству
Ответ №2:
ОК. А вот и куча «если». Если AuditData представляет собой массив. И если клиент надежно находится в том же положении, то
SELECT AuditData[6] FROM MyTable
должен дать
"ClientIP":"11.11.11.11"
Вы можете удалить двойные кавычки, используя строковую функцию replace, чтобы заменить двойные кавычки ничем.