在我的Nifi数据流中,我try 使用Jolt处理器过滤和转换JSON,所以我对此非常陌生.

我的输入JSON是

[
  {
    "id": "1cca9371-b0f2-4c4d-9028-cd534edfecc9",
    "code": "X00615",
    "url": "https://acme.com.az/043f00e8-7db8-4cab-bc1d-5a39b0a89882"
  },
  {
    "id": "4dcacd3d-dbc8-424d-8f13-46706322a4d3",
    "code": "X01337"
  },
  {
    "id": "d5d86231-3180-4436-867b-6889ae7bd80a",
    "code": "X02732",
    "url": "https://acme.com.az/32853ca4-309c-462b-afc4-b56fd4788e8d"
  }
]

我的预期输出JSON是

[
  {
    "id": "1cca9371-b0f2-4c4d-9028-cd534edfecc9",
    "code": "X00615",
    "url": "https://acme.com.az/043f00e8-7db8-4cab-bc1d-5a39b0a89882"
  },
  {
    "id": "d5d86231-3180-4436-867b-6889ae7bd80a",
    "code": "X02732",
    "url": "https://acme.com.az/32853ca4-309c-462b-afc4-b56fd4788e8d"
  }
]

因此,我想删除缺少url条目的元素,或者换句话说,只保留以http开头的值为url的元素.

我可以只获取数组中的url个元素,使用

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        // "id": "[&1].id", // array grows 
        // "code": "[&1].code", // array grows
        "url": {
          "htt*": {
            "$": "[].&2"
          }
        }
      }
    }
  }
]

但是,当我try 包括其他属性/值时,数组增长到4个元素,而不是2个.

推荐答案

以下规范将筛选包含值以http开头的键url的对象

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "@1,url"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "http*": "[]" //only url starting with http will be listed
    }
  }
]

enter image description here

Json相关问答推荐

为什么terraform不缩小这个策略JSON?'

服务器不返回JSON

在Zig中解析JSON失败

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

Jolt - 如何比较 if else 条件的两个值

如何在 JSonPath 中按值查找列表中的所有元素

如何使用 serde_json 构建有状态的流式解析器?

Play Framework:如何序列化/反序列化与 JSON 的枚举

如何在 Go 中生成带有排序键的 JSON?

使用 boost 属性树读取 int 数组

规范化 JSON 文件

将json字符反序列化为枚举

直接从 Java 中的模型类创建 JSON 对象

Java循环遍历Json数组?

as_json 没有在关联上调用 as_json

JSON日期到Java日期?

SCRIPT5009:JSON未定义

将 JsonArray 添加到 JsonObject

如何从 BindingResult 获取控制器中的错误文本

如何在 postgresql 9.3 中循环 JSON 数组