tidwall / sjson

Set JSON values very quickly in Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cannot delete an empty key from a JSON object

deathiop opened this issue · comments

Hello,

That's quite obvious given the beginning of sjson.set, but one cannot delete an empty key from a JSON object using sjson.
Though, this is a valid key, and gjson is able to manipulate its value:

package main

import (
    "encoding/json"
    "fmt"

    "github.com/tidwall/gjson"
    "github.com/tidwall/sjson"
)

const data = `{"name":{"first":"Janet","last":"Prichard"},"age":47, "": "foo"}`

func main() {
    var out map[string]any
    if err := json.Unmarshal([]byte(data), &out); err != nil {
        panic(fmt.Sprintf("Invalid JSON: %v", err))
    }
    fmt.Printf("Valid JSON, parsed Data: %v\n\n", out)

    result := gjson.Get(data, "")
    fmt.Printf("Fetched empty key from GJSON: %#v\n\n", result)

    value, err := sjson.Delete(data, "")
    fmt.Printf("New JSON string after SJSON: %s\n", value)
    fmt.Printf("SJSON error: %v\n", err)
}

gives

$ go run main.go
Valid JSON, parsed Data: map[:foo age:47 name:map[first:Janet last:Prichard]]

Fetched empty key from GJSON: gjson.Result{Type:3, Raw:"\"foo\"", Str:"foo", Num:0, Index:58, Indexes:[]int(nil)}

New JSON string after SJSON: {"name":{"first":"Janet","last":"Prichard"},"age":47, "": "foo"}
SJSON error: path cannot be empty

Would you consider fixing this limitation?

I would consider having this limitation lifted. It's been in there since the first commit. I'm not sure why.

Is there any plans to fix this? Or there is any other possible way to remove empty key from Json object ?