Skip to content

Instantly share code, notes, and snippets.

@utkarshchowdhary
Last active January 30, 2022 08:50
Show Gist options
  • Save utkarshchowdhary/c6f6c5d96a388c2c0071f92fe9256375 to your computer and use it in GitHub Desktop.
Save utkarshchowdhary/c6f6c5d96a388c2c0071f92fe9256375 to your computer and use it in GitHub Desktop.
JSON, Readers, Writers, Encoding and Decoding JSON Streams
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"os"
"strings"
)
func main() {
fmt.Println("Default Temp Dir: ", os.TempDir())
dir, e := ioutil.TempDir(".", "*")
if e != nil {
panic(e)
}
fmt.Println("Temp Dir: ", dir)
f, e := ioutil.TempFile(dir, "*")
if e != nil {
panic(e)
}
fmt.Println("Temp file: ", f.Name())
defer func() {
if e := os.Remove(dir); e != nil {
panic(e)
}
fmt.Println("Removed dir: ", dir)
}()
defer func() {
if e := os.Remove(f.Name()); e != nil {
panic(e)
}
fmt.Println("Removed file: ", f.Name())
}()
defer func() {
if e := f.Close(); e != nil {
panic(e)
}
fmt.Println("Closed file: ", f.Name())
}()
type Item struct {
ID int `json:"id"`
Name string `json:"name"`
}
var items = []Item{{1, "John"}, {2, "Jane"}}
if e := json.NewEncoder(f).Encode(items); e != nil {
panic(e)
}
if _, e := f.Seek(0, io.SeekStart); e != nil {
panic(e)
}
dec := json.NewDecoder(f)
if token, e := dec.Token(); e != nil {
panic(e)
} else {
fmt.Println(token)
}
var item Item
for dec.More() {
err := dec.Decode(&item)
if err != nil {
panic(err)
}
fmt.Printf("item=%+v\n", item)
}
if token, e := dec.Token(); e != nil {
panic(e)
} else {
fmt.Println(token)
}
if _, e := f.Seek(0, io.SeekStart); e != nil {
panic(e)
}
if e := json.NewDecoder(f).Decode(&items); e != nil {
panic(e)
}
fmt.Printf("items=%+v\n", items)
var buffer bytes.Buffer
enc := json.NewEncoder(&buffer)
reader := strings.NewReader(`{"id":1,"name": "John"}{"id":2,"name":"Jane"}`)
dec = json.NewDecoder(reader)
for dec.More() {
if e := dec.Decode(&item); e != nil {
panic(e)
}
fmt.Printf("%+v\n", item)
if e := enc.Encode(item); e != nil {
panic(e)
}
}
fmt.Println(buffer.String())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment