Mam komunikat JSON z tablicą w tablicy. Chcę podzielić to na kilka wydarzeń:Jak podzielić tablicę JSON wewnątrz obiektu
{
"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"
}]
}
Korzystanie filtr podzielić "ziarna":
input {
stdin {
codec => "json"
}
}
filter {
split {
field => "bean"
}
}
output {
stdout{codec => "json"}
}
działa dobrze:
{"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"
}
...
Aby oddzielić również "metody" , Dodałem kolejny filtr dzielony:
split {
field => "bean"
}
split {
field => "bean.method"
}
Ale w ten sposób uzyskać jedynie komunikat o błędzie:
Exception in filterworker {"exception"=>#LogStash::ConfigurationError: Only String and Array types are splittable. field:bean.method is of type = NilClass
Nie mam dostępu do tablicy „metoda” wewnątrz obiektu „fasoli”. Próbowałem różnych notacji bez powodzenia. Czy jest możliwy dostęp do tablicy, może nie jest jeszcze obsługiwany?
Działa, ale ja mam fasolę bez metod. Więc dodałem _if [bean] [method] {..._ i teraz jest w porządku, wielkie dzięki. – joerno
Doskonale, dodałem warunek '[fasola] [metoda]' do mojej odpowiedzi. – hurb
@hurb Co jeśli "fasola" ma tylko jeden element? Ten kod nie działa w takim przypadku –