From 03d7c4693ed7cb5526c7adcdde66d1f7d3fb26a3 Mon Sep 17 00:00:00 2001 From: Reimer Prochnow Date: Tue, 8 Mar 2022 15:55:30 +0100 Subject: [PATCH] fix(json_v2): allow multiple optional objects (#10777) --- plugins/parsers/json_v2/parser.go | 2 +- .../testdata/optional_objects/expected.out | 3 +++ .../testdata/optional_objects/input_1.json | 1 + .../testdata/optional_objects/input_2.json | 1 + .../testdata/optional_objects/telegraf.conf | 21 +++++++++++++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 plugins/parsers/json_v2/testdata/optional_objects/expected.out create mode 100644 plugins/parsers/json_v2/testdata/optional_objects/input_1.json create mode 100644 plugins/parsers/json_v2/testdata/optional_objects/input_2.json create mode 100644 plugins/parsers/json_v2/testdata/optional_objects/telegraf.conf diff --git a/plugins/parsers/json_v2/parser.go b/plugins/parsers/json_v2/parser.go index e9feaf415..28f2983bc 100644 --- a/plugins/parsers/json_v2/parser.go +++ b/plugins/parsers/json_v2/parser.go @@ -416,7 +416,7 @@ func (p *Parser) processObjects(input []byte, objects []JSONObject, timestamp ti if c.Optional { // If path is marked as optional don't error if path doesn't return a result p.Log.Debugf(GJSONPathNUllErrorMSG) - return nil, nil + continue } return nil, fmt.Errorf(GJSONPathNUllErrorMSG) diff --git a/plugins/parsers/json_v2/testdata/optional_objects/expected.out b/plugins/parsers/json_v2/testdata/optional_objects/expected.out new file mode 100644 index 000000000..a6908cf5d --- /dev/null +++ b/plugins/parsers/json_v2/testdata/optional_objects/expected.out @@ -0,0 +1,3 @@ +file,Meter_number=12344 Power_curr=168,Total_in=2769.492 1646326975000000000 +file Humidity=63.3,Pressure=1020.6,Temperature=22.5 1646335555000000000 +file Illuminance=2.022 1646335555000000000 diff --git a/plugins/parsers/json_v2/testdata/optional_objects/input_1.json b/plugins/parsers/json_v2/testdata/optional_objects/input_1.json new file mode 100644 index 000000000..11d0a20a8 --- /dev/null +++ b/plugins/parsers/json_v2/testdata/optional_objects/input_1.json @@ -0,0 +1 @@ +{"Time":"2022-03-03T17:02:55","MT681":{"Power_curr":168,"Total_in":2769.492,"Meter_number":"12344"}} diff --git a/plugins/parsers/json_v2/testdata/optional_objects/input_2.json b/plugins/parsers/json_v2/testdata/optional_objects/input_2.json new file mode 100644 index 000000000..89ffc6ee5 --- /dev/null +++ b/plugins/parsers/json_v2/testdata/optional_objects/input_2.json @@ -0,0 +1 @@ +{"Time":"2022-03-03T19:25:55","BME280":{"Temperature":22.5,"Humidity":63.3,"DewPoint":15.1,"Pressure":1020.6,"SeaPressure":1024.1},"TSL2561":{"Illuminance":2.022,"IR":16,"Broadband":78},"PressureUnit":"hPa","TempUnit":"C"} diff --git a/plugins/parsers/json_v2/testdata/optional_objects/telegraf.conf b/plugins/parsers/json_v2/testdata/optional_objects/telegraf.conf new file mode 100644 index 000000000..78d2df8bf --- /dev/null +++ b/plugins/parsers/json_v2/testdata/optional_objects/telegraf.conf @@ -0,0 +1,21 @@ +# Parse different objects +[[inputs.file]] + files = ["./testdata/optional_objects/input_1.json", "./testdata/optional_objects/input_2.json"] + data_format = "json_v2" + [[inputs.file.json_v2]] + timestamp_path = "Time" + timestamp_format = "2006-01-02T15:04:05" + [[inputs.file.json_v2.object]] + path = "BME280" + included_keys = ["Humidity", "Pressure", "Temperature"] + optional = true + [[inputs.file.json_v2.object]] + path = "TSL2561" + included_keys = ["Illuminance"] + optional = true + [[inputs.file.json_v2.object]] + path = "MT681" + optional = true + tags = ["Meter_number"] + +