Decode large stream JSON

后端 未结 3 1838
野的像风
野的像风 2020-12-16 11:21

I have a massive JSON array stored in a file (\"file.json\") I need to iterate through the array and do some operation on each element.

err = json.Unmarshal(         


        
3条回答
  •  醉话见心
    2020-12-16 11:54

    There is an example of this sort of thing here: https://golang.org/pkg/encoding/json/#example_Decoder_Decode_stream.

    package main
    
    import (
        "encoding/json"
        "fmt"
        "log"
        "strings"
    )
    
    func main() {
        const jsonStream = `
                    [
                        {"Name": "Ed", "Text": "Knock knock."},
                        {"Name": "Sam", "Text": "Who's there?"},
                        {"Name": "Ed", "Text": "Go fmt."},
                        {"Name": "Sam", "Text": "Go fmt who?"},
                        {"Name": "Ed", "Text": "Go fmt yourself!"}
                    ]
                `
        type Message struct {
            Name, Text string
        }
        dec := json.NewDecoder(strings.NewReader(jsonStream))
    
        // read open bracket
        t, err := dec.Token()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%T: %v\n", t, t)
    
        // while the array contains values
        for dec.More() {
            var m Message
            // decode an array value (Message)
            err := dec.Decode(&m)
            if err != nil {
                log.Fatal(err)
            }
    
            fmt.Printf("%v: %v\n", m.Name, m.Text)
        }
    
        // read closing bracket
        t, err = dec.Token()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%T: %v\n", t, t)
    
    }
    

提交回复
热议问题