Как разобрать строку с экранированным json, используя dataweave 2.0

Мне нужно проанализировать ответ 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 в другом соединителе, и я не могу

Входные данные представляют собой не «перечеркнутый» JSON, а экранированный ввод JSON.

aled 23.12.2020 04:06

aled, спасибо за ваш комментарий, я изменил заголовок

mhery 23.12.2020 12:57

Привет, Мери. Откуда эта строка? Возможно, вам просто нужно установить правильный тип Mime в источнике. Если это невозможно решить в начале, решение Салима выглядит лучшим подходом.

Jorge Garcia 23.12.2020 14:31

Хорхе, спасибо за ваш комментарий. Решение Салима здесь хорошо сработало :)

mhery 24.12.2020 01:27
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
4
886
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать следующее выражение DataWeave:

%dw 2.0
output application/json
---
read((payload replace /^"|"$/ with '') replace '\"' with '"', "application/json")

Первая замена удалит двойные кавычки в заголовке и конце, а вторая заменит двойные кавычки с обратной косой чертой на двойные кавычки.

olamiral, спасибо за ответ. Хотя это работает, мне нужно получить доступ, например, к значению Customers.Id, и я все еще не могу использовать ваше выражение

mhery 23.12.2020 13:01

Привет, мэри! Вы можете убедиться, что это отвечает именно на то, что было задано в вашем вопросе. Не могли бы вы обновить свой вопрос, чтобы отразить то, чего вы действительно пытаетесь достичь? Спасибо.

olamiral 23.12.2020 13:49

Извини, оламирал, это была моя ошибка. ваш код действительно работает!

mhery 23.12.2020 13:59
Ответ принят как подходящий

как насчет этого?

%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() для анализа возвращает ожидаемый результат.

aled 23.12.2020 04:05

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