繁体   English   中英

从 Kafka 消息读取 Json 路径

[英]Json Path Read from a Kafka Message

我有一个像下面这样的 kafka 消息,我试图从 json 路径读取数据。 但是,我在从 json 路径读取某些属性时遇到了挑战。 这是示例消息。

样本 1:

{
  "header": {
    "bu": "google",
    "id": "12345",
    "bum": "google",
    "originTimestamp": "2021-10-09T15:17:09.842+00:00",
    "batchSize": "0",
    "jobType": "Batch"
  },
  "payload": {
    "derivationdetails": {
      "Id": "6783jhvvh897u31y283y",
      "itemid": "1234567",
      "batchid": 107,
      "attributes": {
        "itemid": "1234567",
        "lineNbr": "1498",
        "cat": "5929",
        "Id": "6783jhvvh897u31y283y",
        "indicator": "false",
        "subcat": "3514"
      },
      "Exception": {
        "values": [
          {
            "type": "PICK",
            "value": "blocked",
            "Reason": [
              "RULE"
            ],
            "rules": [
              "439"
            ]
          }
        ],
        "rulesBagInfo": [
          {
            "Idtype": "XXXX",
            "uniqueid": "7889423rbhevfhjaufdyeuiryeukjbdafvjd",
            "rulesMatch": [
              "439"
            ]
          }
        ]
      }
    }
  }
}

示例 2:相同的消息,但查看“有效负载”中的差异

{
  "header": {
    "bu": "google",
    "id": "12345",
    "bum": "google",
    "originTimestamp": "2021-10-09T15:17:09.842+00:00",
    "batchSize": "0",
    "jobType": "Batch"
  },
  "payload": {
      "Id": "6783jhvvh897u31y283y",
      "itemid": "1234567",
      "batchid": 107,
      "attributes": {
        "itemid": "1234567",
        "lineNbr": "1498",
        "cat": "5929",
        "Id": "6783jhvvh897u31y283y",
        "indicator": "false",
        "subcat": "3514"
      },
      "Exception": {
        "values": [
          {
            "type": "PICK",
            "value": "blocked",
            "Reason": [
              "RULE"
            ],
            "rules": [
              "439"
            ]
          }
        ],
        "rulesBagInfo": [
          {
            "Idtype": "XXXX",
            "uniqueid": "7889423rbhevfhjaufdyeuiryeukjbdafvjd",
            "rulesMatch": [
              "439"
            ]
          }
        ]
      }
  }
}

如果您观察,有时该消息具有“派生详细信息”,有时则没有。 但不管它是否存在,我都需要读取 id、itemid 和 batchid 的值。 我尝试使用

$.payload[*].id
$.payload[*].itemid
$.payload[*].batchid

但是我看到对于batchid,即使它在消息中有一个值,它也返回null,并且如果我使用上述内容,则“属性”下的属性返回null。 对于“属性”下的字段,我使用这个(示例):

$.payload.attributes.itemId

而且,对于如何阅读以下部分完全空白。

"Exception": {
        "values": [
          {
            "type": "PICK",
            "value": "blocked",
            "Reason": [
              "RULE"
            ],
            "rules": [
              "439"
            ]
          }
        ],
        "rulesBagInfo": [
          {
            "Idtype": "XXXX",
            "uniqueid": "7889423rbhevfhjaufdyeuiryeukjbdafvjd",
            "rulesMatch": [
              "439"
            ]

我对此很陌生,需要一些有关如何正确读取属性的建议。 任何帮助将不胜感激。谢谢

使用.. (递归下降,深度扫描。JSONPath 从 E4X 借用了这个语法。)来获取值。 但是如果有多个具有相同键嵌套的条目,它将返回一个列表。

下面的jsonpath表达式将返回一个list ,其中为 sample1 和 sample2 各有一个项目

$.payload..attributes.Id
$.payload..attributes.itemid
$.payload..batchid
$.payload..Exception

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM