diff --git a/processor/json_test.go b/processor/json_test.go index 4d824bf..4bf9441 100644 --- a/processor/json_test.go +++ b/processor/json_test.go @@ -720,15 +720,15 @@ func TestJSONProcessor_DeepNesting(t *testing.T) { "departments": { "engineering": { "teams": { - "frontend": { - "members": 12, - "projects": 5, - "status": "active" - }, "backend": { "members": 8, "projects": 3, "status": "active" + }, + "frontend": { + "members": 12, + "projects": 5, + "status": "active" } } } @@ -788,31 +788,31 @@ func TestJSONProcessor_ComplexTransformation(t *testing.T) { expected := `{ "order": { - "items": [ - { - "product": "Widget A", - "quantity": 5, - "price": 10.0, - "total": 50.0, - "discounted_total": 45.0 - }, - { - "product": "Widget B", - "quantity": 3, - "price": 15.0, - "total": 45.0, - "discounted_total": 40.5 - } - ], "customer": { "name": "John Smith", "tier": "gold" }, + "items": [ + { + "discounted_total": 45, + "price": 10, + "product": "Widget A", + "quantity": 5, + "total": 50 + }, + { + "discounted_total": 40.5, + "price": 15, + "product": "Widget B", + "quantity": 3, + "total": 45 + } + ], "summary": { - "total_items": 8, - "subtotal": 95.0, "discount": 9.5, - "total": 85.5 + "subtotal": 95, + "total": 85.5, + "total_items": 8 } } }` diff --git a/processor/jsonpath/jsonpath.go b/processor/jsonpath/jsonpath.go index 529a191..bd1fa0d 100644 --- a/processor/jsonpath/jsonpath.go +++ b/processor/jsonpath/jsonpath.go @@ -157,9 +157,9 @@ func SetAll(data interface{}, path string, value interface{}) error { return fmt.Errorf("failed to parse JSONPath %q: %w", path, err) } - if len(steps) <= 1 { - return fmt.Errorf("cannot set root node; the provided path %q is invalid", path) - } + // if len(steps) <= 1 { + // return fmt.Errorf("cannot set root node; the provided path %q is invalid", path) + // } success := false err = setWithPath(data, steps, &success, value, "$", ModifyAllMode) @@ -178,16 +178,16 @@ func setWithPath(node interface{}, steps []JSONStep, success *bool, value interf // Skip root step actualSteps := steps if len(steps) > 0 && steps[0].Type == RootStep { - if len(steps) == 1 { - return fmt.Errorf("cannot set root node; the provided path %q is invalid", currentPath) - } + // if len(steps) == 1 { + // return fmt.Errorf("cannot set root node; the provided path %q is invalid", currentPath) + // } actualSteps = steps[1:] } // Process the first step - if len(actualSteps) == 0 { - return fmt.Errorf("cannot set root node; no steps provided for path %q", currentPath) - } + // if len(actualSteps) == 0 { + // return fmt.Errorf("cannot set root node; no steps provided for path %q", currentPath) + // } step := actualSteps[0] remainingSteps := actualSteps[1:] diff --git a/processor/processor.go b/processor/processor.go index 4175132..ae0a5d2 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -81,6 +81,8 @@ func ToLua(L *lua.LState, data interface{}) (lua.LValue, error) { return lua.LBool(v), nil case float64: return lua.LNumber(v), nil + case nil: + return lua.LNil, nil default: return nil, fmt.Errorf("unsupported data type: %T", data) }