首页 > 解决方案 > EvaluateJsonPath 无法返回标量

问题描述

我正在尝试从 JSON 中提取一个值到flowfile-attribute。当我运行 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"]而不仅仅是字符串。

如果对流文件内容而不是属性进行评估,这就是我得到的。为什么?我能做些什么来修复它?

标签: jsonapache-nifijsonpath

解决方案


如果要提取为流文件属性,请将处理器中的返回类型属性值更改为jsonEvaluateJsonPath

返回类型属性说明:

指示 JSON 路径表达式的所需返回类型。选择“ auto-detect ”会将返回类型设置为“ json ”,用于“ flowfile-content ”的目的地,将“ scalar ”设置为“ flowfile-attribute ”的目的地。

在此处输入图像描述 当您尝试提取嵌套键而不是根级别的键时(例如:名称,createTime ..),这就是我们需要将返回类型配置为Json而不是标量的原因。

此外,您可以使用FlattenJson处理器(分隔符'_')来展平所有嵌套的 json,然后Return Type as auto detectEvaluateJsonPath处理器中使用。

评估JsonConfigs: 在此处输入图像描述

输出: 我们将拥有不包含在数组中的属性值 在此处输入图像描述


推荐阅读