EvaluateJsonPath не может вернуть скаляр - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь извлечь значение из JSON в атрибут flowfile .Когда я запускаю процессор EvaluateJsonPath, я получаю сообщение об ошибке

"Unable to get a scalar value for expression $..fields.storyBoard.stringValue.

Входной JSON выглядит следующим образом:

{
  "name" : "projects/fakedims-0000/databases/(default)/documents/device/0000",
  "fields" : {
    "reportKey" : {
      "stringValue" : "abc123"
    },
    "dateOccured" : {
      "timestampValue" : "2018-10-14T04:00:00Z"
    },
    "storyBoard" : {
      "stringValue" : "https://path/to/media"
    },
    "new" : {
      "integerValue" : "25"
    },
    "name" : {
      "stringValue" : "device one"
    },
    "location" : {
      "geoPointValue" : {
        "latitude" : -78.413751,
        "longitude" : 38.156487
      }
    }
  },
  "createTime" : "2018-10-19T00:02:26.209335Z",
  "updateTime" : "2018-10-19T22:22:24.382136Z"
}

Выражение JSONPath равно $..fields.storyBoard.stringValue

Я думаю, что происходит то, что процессорвозвращая ["https://path/to/media"], а не просто строку.

Это то, что я получаю, если оцениваю как flowfile-content, а не как атрибут.Зачем?Что я могу сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 23 октября 2018

Измените свойство Возвращаемый тип на значение json в EvaluateJsonPath процессоре, если вы извлекаете его как атрибут flowfile

Описание свойства возвращаемого типа:

Указывает желаемый тип возврата выражений JSON Path.Выбор ' автоопределение ' установит тип возвращаемого значения ' json ' для пункта назначения: flowfile-content 'и' scalar 'для пункта назначения' flowfile-attribute '.

enter image description here Поскольку вы пытаетесь извлечь вложенный ключ, а не ключ накорневой уровень (например: name, createTime ..), поэтому мы должны настроить тип возвращаемого значения как Json , а не scalar .

Кроме того, выможно использовать FlattenJson процессор (разделитель '_') для выравнивания всех вложенных json, затем использовать Return Type as auto detect in EvaluateJsonPath процессор.

EvaluateJsonConfigs: enter image description here

Вывод: Мы собираемся получить значение атрибута без включения в массив enter image description here

...