Я использую JSONata для выполнения преобразования JSON в JSON.
По некоторым уникальным причинам я хочу объединить два выражения JSONata:
Как пример:
Родительское выражение:
var script = `
{
"data":
{
"name" : data.payload.Name.(FirstName & ' ' & LastName),
"alias": data.payload.Name.(Salutation & ' ' & FirstName),
"active": data.payload.Status = 'New' ? true : false,
"signature": "Have good day ," & data.payload.Name.FirstName & "!"
}
}
`;
Также у меня есть несколько простых типов присваивания выражения JSONata, таких как:
Выражение 1:
{
"source" : source
}
Выражение 2:
{
"data": {
"email" : data.payload.Email
}
}
Я хотел бы добавить два выше выражения к выражениям, определенным с использованием script
.
Так что после добавления этих двух выражений,Я должен быть в состоянии получить:
var script = `
{
"source": source,
"data":
{
"name" : data.payload.Name.(FirstName & ' ' & LastName),
"alias": data.payload.Name.(Salutation & ' ' & FirstName),
"active": data.payload.Status = 'New' ? true : false,
"signature": "Have good day ," & data.payload.Name.FirstName & "!",
"email": data.payload.Email
}
}
`;
Как мне использовать javascript / JSONata?
Фон и ограничения:
Дочерние выражения (выражения 1 и 2 в примере) (которые должны быть добавлены в родительское выражение) всегда будут простым присваиванием, как "a" : x.y.z or "b" : x
.
Дочерние выражения могутуже присутствовать в родительском выражении.В этом случае он заменяет присваивание.
Также я хочу удалить некоторые пути json из родительского выражения (ofcouse, если оно присутствует), например If delete path data.Email
.
Что я сделал?:
- Я пытался преобразовать скрипт JSONata в JSON, поместив значения в двойные кавычки и кодировав значение с помощью функции escape ().
Получив JSON, я ищу путь, упомянутый в дочернем выражении (например, data.Email)
- Если путь существует: замените его значение
- Если путь не существует: создайте путь и присвойте значение
- Если путь должен быть удален: просто удалите его.
Как только я закончил обработку вышеJSON, я преобразовываю его в сценарий JSONata, удаляя кавычки, используя набор регулярных выражений, а затем применяя метод unescape () для декодирования.
Проблема с этим подходом:
- Это ненадежно (сопоставление и замена регулярных выражений не является полностью защищенным)
- Я не уверен, можно ли всегда преобразовывать каждую JSONata (которая не объявляет какие-либо функции) в действительный JSON.