Skip to content

Commit 08b1a90

Browse files
fix(logql): updated JSONExpressionParser not to unescape extracted values if it is JSON object. (#14499)
Signed-off-by: Vladyslav Diachenko <[email protected]>
1 parent 5d57a03 commit 08b1a90

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

pkg/logql/log/parser.go

+2
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,8 @@ func (j *JSONExpressionParser) Process(_ int64, line []byte, lbs *LabelsBuilder)
625625
switch typ {
626626
case jsonparser.Null:
627627
lbs.Set(ParsedLabel, key, "")
628+
case jsonparser.Object:
629+
lbs.Set(ParsedLabel, key, string(data))
628630
default:
629631
lbs.Set(ParsedLabel, key, unescapeJSONString(data))
630632
}

pkg/logql/log/parser_test.go

+26-4
Original file line numberDiff line numberDiff line change
@@ -542,13 +542,35 @@ func TestJSONExpressionParser(t *testing.T) {
542542
),
543543
NoParserHints(),
544544
},
545+
{
546+
"nested object with escaped value",
547+
[]byte(`{"app":{"name":"great \"loki\""}`),
548+
[]LabelExtractionExpr{
549+
NewLabelExtractionExpr("app", `app`),
550+
},
551+
labels.FromStrings("foo", "bar"),
552+
labels.FromStrings("foo", "bar",
553+
"app", `{"name":"great \"loki\""}`,
554+
),
555+
NoParserHints(),
556+
},
557+
{
558+
"field with escaped value inside the json string",
559+
[]byte(`{"app":"{\"name\":\"great \\\"loki\\\"\"}"}`),
560+
[]LabelExtractionExpr{
561+
NewLabelExtractionExpr("app", `app`),
562+
},
563+
labels.FromStrings("foo", "bar"),
564+
labels.FromStrings("foo", "bar",
565+
"app", `{"name":"great \"loki\""}`,
566+
),
567+
NoParserHints(),
568+
},
545569
}
546570
for _, tt := range tests {
547-
j, err := NewJSONExpressionParser(tt.expressions)
548-
if err != nil {
549-
t.Fatalf("cannot create JSON expression parser: %s", err.Error())
550-
}
551571
t.Run(tt.name, func(t *testing.T) {
572+
j, err := NewJSONExpressionParser(tt.expressions)
573+
require.NoError(t, err, "cannot create JSON expression parser")
552574
b := NewBaseLabelsBuilderWithGrouping(nil, tt.hints, false, false).ForLabels(tt.lbs, tt.lbs.Hash())
553575
b.Reset()
554576
_, _ = j.Process(0, tt.line, b)

0 commit comments

Comments
 (0)