Search code examples
jsongounmarshallingjson-deserialization

Decoding top level JSON array with json.Decoder


Is it possible to decode top level JSON array with json.Decoder?

Or reading entire JSON and json.Unmarshall is the only way in this case?

I have read the accepted answer in this question and cannot figure out how to use it with top level JSON array


Solution

  • You use json.Decoder in same way as any other json. Only difference is that instead of decoding into a struct, json need to be decoded into a slice of struct. This is a very simple example. Go Playground

    package main
    
    import (
        "bytes"
        "encoding/json"
        "fmt"
    )
    
    type Result struct {
        Name         string `json:"Name"`
        Age          int    `json:"Age`
        OriginalName string `json:"Original_Name"`
    }
    
    func main() {
        jsonString := `[{"Name":"Jame","Age":6,"Original_Name":"Jameson"}]`
        result := make([]Result, 0)
        decoder := json.NewDecoder(bytes.NewBufferString(jsonString))
        err := decoder.Decode(&result)
        if err != nil {
            panic(err)
        }
        fmt.Println(result)
    }