json - 从 Kafka 消息中读取的 Json 路径
问题描述
我有一条如下所示的 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
推荐阅读
- php - PHP 在 readfile 中包含 HTML
- string - 销售人员 | 当我只有字符串形式的字段时,从 SObject 记录的字段中获取数据
- node.js - 条纹计费门户 NodeJS
- spring-boot - Kotlin + Spring Boot + @Valid 无效子对象的内部对象
- api-platform.com - api平台的自定义查询参数
- list - 当一个列表可能为空时,在 Ansible 中合并两个列表
- c++ - 实现 WM_QUERYENDSESSION
- json - Task.json dataSourceBindings 选择 Azure 资源组以显示其位置
- swift - 当图表上没有数据图时图表视口高度增加
- python - 用于在 Windows 中自动安装软件的 Python 脚本