Last active
January 30, 2022 08:50
-
-
Save utkarshchowdhary/c6f6c5d96a388c2c0071f92fe9256375 to your computer and use it in GitHub Desktop.
JSON, Readers, Writers, Encoding and Decoding JSON Streams
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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