как проверить, является ли полученный JSON пустым / нулевым в муле 4

Я пытаюсь проверить, является ли объект json пустым / нулевым, но получаю следующую ошибку:

org.mule.runtime.core.api.expression.ExpressionRuntimeException: "Unable to parse empty input, while reading `obj` as Json.

1|
   ^
Trace:
  at main (line: 1, column: 1)" evaluating expression: "isEmpty(vars.obj)".

Кроме того, я заметил, что в отладчике mule переменная выглядит так:

obj= 

Пожалуйста, предложите решение.


person HMT    schedule 13.05.2020    source источник
comment
Вы можете поделиться кодом?   -  person Ryan Carter    schedule 13.05.2020
comment
Я получил этот объект json из внешнего API   -  person HMT    schedule 13.05.2020
comment
Пожалуйста, предоставьте дополнительную информацию - какая версия mule, образец полезной нагрузки и т. Д. Вы говорите, что проверяете, является ли объект JSON пустым или нулевым; вы имеете в виду всю полезную нагрузку или конкретный ключ? Также укажите подробности того, как вы пытаетесь установить переменную.   -  person Michael Jones    schedule 13.05.2020
comment
Добавьте регистратор сразу после вызова API и выполните output application/json --- payload, чтобы увидеть, какие данные вы получаете от API. Вы можете попробовать другие типы MIME, если JSON не работает.   -  person George    schedule 13.05.2020
comment
Ни один из предложенных ответов на самом деле не работает в dw 2.0. Полезная нагрузка типа application / json буквально равна нулю, и даже isEmpty (полезная нагрузка) не работает с ошибкой исходного плаката.   -  person AndrWeisR    schedule 17.02.2021


Ответы (2)


Все входные данные должны быть проверены должным образом, как описано здесь https://simpleflatservice.com/mule4/DoubleAndTripleCheckmlTheInput.html а>

null можно проверить заранее, например

vars.obj == null or isEmpty(vars.obj)

Однако в этом нет необходимости. Функция isEmpty отлично работает с нулями.

%dw 2.0
output application/json
---
{
    reallyEmpty: isEmpty(''),
    nullOrReallyEmpty: isEmpty(null),
    unknownVaraiable: isEmpty(vars.xyz)
}

выход

{
  "reallyEmpty": true,
  "nullOrReallyEmpty": true,
  "unknownVaraiable": true
}

Также обратите внимание на WhiteSpaceString

введите здесь описание изображения

person Alex    schedule 13.05.2020
comment
isEmpty (vars.obj) не возвращает истину - person HMT; 13.05.2020
comment
Тогда не пусто. Зарегистрируйте это и посмотрите. В моем примере третья строка не предназначена для существующей переменной. Возвращается правда. Возможно, что vars.obj в Linux отличается из-за текстовых / двоичных файлов, ‹CR› ‹LF› vs ‹CR› и т. Д. Моя точка зрения - зарегистрируйте этот вариант и дважды проверьте, соответствует ли он вашим ожиданиям. - person Alex; 13.05.2020
comment
Также обратите внимание на WhiteSpaceString. Я обновил свой ответ изображением - person Alex; 13.05.2020

Если MIME-тип полезной нагрузки - application / json, то пустой объект не является допустимым JSON и не может быть проанализирован. Полезная нагрузка должна быть {}. См. документ Mule. Решение состоит в том, чтобы клиент отправлял {}, если тип MIME - application / json.

person AndrWeisR    schedule 15.06.2021