我正在学习NIFI,并建立了一个简单的流

  • 显示包含IP的查询的HTTP端点(HandleHttpRequest)...
  • ...它被转换为添加一个ip属性(UpdateAttribute)...
  • ...被送go 进行地理定位浓缩(GeoEnrichIP).
  • ...将其属性转换为JSON内容(AtributesToJSON)...
  • ...并最终发送回请求者

它工作得很好,只是响应的形式是

{
  "http.request.uri": "/hello/1.1.1.1",
  "http.context.identifier": "92906daf-152b-4af2-90a4-c2e455e2a52d",
  "http.remote.host": "172.19.0.1",
  "http.headers.Host": "127.0.0.1:16543",
  "http.local.name": "172.19.0.4"
}

我更喜欢把它拆分成一个实际的 struct ,比如

{
  "http": {
    "request": {
      "uri": "/hello/1.1.1.1"
    },
    "context": etc.

这是用NiFi做的一件简单的事情吗?(否则我会保留我现在拥有的带有相关数据的回复,只是格式不是最优的)

推荐答案

您可以添加具有以下specification100处理器:

[
  {
    "operation": "shift",
    "spec": {
      "*.*.*": { // partition the expressions(*) by dots
        "@": "&(1,1).&(1,2).&(1,3)" // pick 1st, 2nd, 3rd pieces from the expressions respectively
                                    // after going 1 level up the tree 
      }
    }
  }
]

这将会产生

{
  "http" : {
    "request" : {
      "uri" : "/hello/1.1.1.1"
    },
    "context" : {
      "identifier" : "92906daf-152b-4af2-90a4-c2e455e2a52d"
    },
    "remote" : {
      "host" : "172.19.0.1"
    },
    "headers" : {
      "Host" : "127.0.0.1:16543"
    },
    "local" : {
      "name" : "172.19.0.4"
    }
  }
}

没有关于要解析的级别数量的情报-它是完全匹配的,不匹配的会被丢弃.您需要显式提供所有所需深度的模式.例如,关键点可能具有单点和双点,如上例所示:

[
  {
    "operation": "shift",
    "spec": {
      "*.*.*": "&(0,1).&(0,2).&(0,3)", // zeroes here represent the current level for the tree
      "*.*": "&(0,1).&(0,2)" // considering if there's any key having only one dot
    }
  }
]

Json相关问答推荐

JOLT将对象名作为新属性添加到主体中

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

使用单元和非单元版本反序列化Rust中的枚举,而无需编写自定义反序列化程序

用于参考的Jolt变换

将PostgreSQL转换为JSON对象

使用JQ将JSON输出转换为CSV复杂 struct

Powershell ConvertFrom-Json 意外地从包含字符串的单个项目数组生成字符串而不是对象数组

Jolt Spec 跳过数组中的第一个元素

根据值过滤输入的JSON并使用它准备预期的输出

jq可以在两个JSON对象列表中依次添加对象吗?

将来自 Golang 的 JSON API 调用响应输出到 nextjs 前端

如何从 json 中获取单个元素?

ORA-01422: 精确提取返回的行数超过了与 json 对象组合的请求数

使用带有逗号的字段名称构建 struct

为什么在测试 RSPEC 时 JBuilder 不返回 JSON 中的响应正文

如何在 Eclipse 中安装和使用 JSON 编辑器?

如何将有向无环图 (DAG) 存储为 JSON?

为不同类型的项目数组正确的 JSON Schema

Jackson JSON序列化,通过级别定义避免递归

FastAPI:如何将正文读取为任何有效的 json?