bitly / go-simplejson

a Go package to interact with arbitrary JSON
MIT License
3.76k stars 498 forks source link

NewJson should fail, but it does not #91

Open ling-zhou opened 3 years ago

ling-zhou commented 3 years ago

import (
        "fmt"
        sjson "github.com/bitly/go-simplejson"
)

func main() {
        body := `"{"client_id":"abc123","client_ip":"59.37.125.15","client_version":"1"}"`
        // body := `{"client_id":"abc123","client_ip":"59.37.125.15","client_version":"1"}`

        js, err := sjson.NewJson([]byte(body))
        if err != nil {
                fmt.Printf("failed to decode json(%s): %v", body, err) // should fail, but it does not!
                return
        }

        fmt.Printf("js: (%v)\n", js)
        return
}
phanirithvij commented 3 years ago

I think the issue is in the standard library itself

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
)
func main() {
    body := `"{"client_id":"abc123","client_ip":"59.37.125.15","client_version":"1"}"`
    // body := `{"client_id":"abc123","client_ip":"59.37.125.15","client_version":"1"}`

        // what we normally do (works as expected with an error)
    var x interface{}
    err := json.Unmarshal([]byte(body), &x)
    if err != nil {
        fmt.Printf("Err: %v\n", err)
    }
    fmt.Printf("x: (%v)\n", x)

        // the code used by this library to decode (same standard lib but it succeeds)
    var y interface{}
    dec := json.NewDecoder(bytes.NewReader([]byte(body)))
    err = dec.Decode(&y)
    if err != nil {
        fmt.Printf("Err: %v\n", err)
    }
    fmt.Printf("y: (%v)\n", y)
}