Tôi có một JSON-Message với một mảng trong một mảng. Tôi muốn chia đó vào nhiều sự kiện:Cách tách một mảng JSON bên trong một đối tượng
{
"type": "monitor",
"server": "10.111.222.333",
"host": "abc.de",
"bean": [{
"name": "beanName1",
"reseted": "2015-06-05T15:10:00.192Z",
"method": [{
"name": "getAllXY",
"count": 5,
"min": 3,
"max": 5
},
{
"name": "getName",
"count": 4,
"min": 2,
"max": 4
}]
},
{
"name": "beanName2",
"reseted": "2015-06-05T15:10:00.231Z",
"method": [{
"name": "getProperty",
"count": 4,
"min": 3,
"max": 3
}]
},
{
"name": "beanName3",
"reseted": "2015-06-05T15:10:00.231Z"
}]
}
Sử dụng một bộ lọc để tách "đậu":
input {
stdin {
codec => "json"
}
}
filter {
split {
field => "bean"
}
}
output {
stdout{codec => "json"}
}
đang làm việc tốt:
{"type":"monitor",
"server":"10.111.222.333",
"host":"abc.de",
"bean":{
"name":"beanName1",
"reseted":"2015-06-05T15:10:00.192Z",
"method":[{
"name":"getAllXY",
"count":5,
"min":3,
"max":5
},{
"name":"getName",
"count":4,
"min":2,
"max":4
}]},
"@version":"1",
"@timestamp":"2015-07-14T09:21:18.326Z"
}
{"type":"monitor",
"server":"10.111.222.333",
"host":"abc.de",
"bean":{
"name":"beanName2",
"reseted":"2015-06-05T15:10:00.231Z",
"method":[{
"name":"getProperty",
"count":4,
"min":3,
"max":3
}]},
"@version":"1",
"@timestamp":"2015-07-14T09:21:18.326Z"
}
...
Để tách cũng là "phương pháp" , Tôi đã thêm một bộ lọc tách khác:
split {
field => "bean"
}
split {
field => "bean.method"
}
Nhưng theo cách đó, tôi chỉ nhận được thông báo lỗi:
Exception in filterworker {"exception"=>#LogStash::ConfigurationError: Only String and Array types are splittable. field:bean.method is of type = NilClass
Tôi không thể truy cập mảng "phương thức" bên trong đối tượng "bean". Tôi đã thử các ký hiệu khác nhau mà không có may mắn. Có thể truy cập vào mảng, có thể nó chưa được hỗ trợ?
Nó hoạt động, nhưng tôi có đậu mà không có phương pháp. Vì vậy, tôi đã thêm _if [bean] [method] {..._ và bây giờ nó ổn, cảm ơn rất nhiều. – joerno
Tuyệt vời, tôi đã thêm điều kiện '[bean] [method]' vào câu trả lời của mình. – hurb
@hurb Nếu "đậu" chỉ có một phần tử thì sao? Mã này không hoạt động trong trường hợp đó –