EvaluateJsonPath无法返回标量

时间:2018-10-23 03:20:40

标签: json apache-nifi jsonpath

我正在尝试从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 :(得分:3)

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

返回类型属性描述:

  

表示所需的JSON Path表达式的返回类型。   选择“ 自动检测”会将返回类型设置为“ json ”   目标的“ 流文件内容”和“ 标量”的目标   “ 流文件属性”。

enter image description here 当您尝试提取嵌套键而不是根级别的键(例如:name,createTime ..)时,这就是为什么我们需要将返回类型配置为 Json 而不是的原因标量

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

评估JsonConfigs enter image description here

输出: 我们将拥有属性值,而无需将其包含在数组中 enter image description here