Мне нужно проанализировать ответ API, который выглядит следующим образом:
"[{\"Customers\":[{\"Id\":1607715391563}],\"Partners\":[],\"ModDate\":\"\/Date(1608031919597)\/\",\"CreatedByUserId\":null},{\"Message\":null,\"Code\":\"200\",\"NextPage\":1}]"
Я хотел бы, чтобы у меня было так:
[
{
"Customers":[
{
"Id":1607715391563
}
],
"Partners":[
],
"ModDate":"/Date(1608031919597)/",
"CreatedByUserId":null
},
{
"Message":null,
"Code":"200",
"NextPage":1
}
]
Я уже пытался удалить строки с помощью payload[1 to -2]
и разобрать JSON с помощью read(payload[1 to -2], 'application/json')
. Я уже пытался следовать некоторым советам по этой ссылке, но ничего не получилось.
Обновлено: Дело в том, что я хочу получить доступ, например, к значению Customers.Id в другом соединителе, и я не могу
aled, спасибо за ваш комментарий, я изменил заголовок
Привет, Мери. Откуда эта строка? Возможно, вам просто нужно установить правильный тип Mime в источнике. Если это невозможно решить в начале, решение Салима выглядит лучшим подходом.
Хорхе, спасибо за ваш комментарий. Решение Салима здесь хорошо сработало :)
Вы можете попробовать следующее выражение DataWeave:
%dw 2.0
output application/json
---
read((payload replace /^"|"$/ with '') replace '\"' with '"', "application/json")
Первая замена удалит двойные кавычки в заголовке и конце, а вторая заменит двойные кавычки с обратной косой чертой на двойные кавычки.
olamiral, спасибо за ответ. Хотя это работает, мне нужно получить доступ, например, к значению Customers.Id, и я все еще не могу использовать ваше выражение
Привет, мэри! Вы можете убедиться, что это отвечает именно на то, что было задано в вашем вопросе. Не могли бы вы обновить свой вопрос, чтобы отразить то, чего вы действительно пытаетесь достичь? Спасибо.
Извини, оламирал, это была моя ошибка. ваш код действительно работает!
как насчет этого?
%dw 2.0
output application/json
var inpString = "[{\"Customers\":[{\"Id\":1607715391563}],\"Partners\":[],\"ModDate\":\"\/Date(1608031919597)\/\",\"CreatedByUserId\":null},{\"Message\":null,\"Code\":\"200\",\"NextPage\":1}]"
---
read(inpString,"application/json")
Это должен быть правильный ответ. Проблема в том, что по какой-то причине ввод является экранированным документом JSON. Использование read() для анализа возвращает ожидаемый результат.
Входные данные представляют собой не «перечеркнутый» JSON, а экранированный ввод JSON.