| @ -0,0 +1,38 @@ | |||||
| package main | |||||
| import ( | |||||
| "encoding/json" | |||||
| "flag" | |||||
| "fmt" | |||||
| "io" | |||||
| "os" | |||||
| "github.com/brettlangdon/jsonstream" | |||||
| ) | |||||
| var input io.Reader | |||||
| var inputFile string | |||||
| func init() { | |||||
| flag.StringVar(&inputFile, "file", nil, "") | |||||
| } | |||||
| func main() { | |||||
| reader := jsonstream.NewReader(os.Stdin) | |||||
| for { | |||||
| data, err := reader.ReadLine() | |||||
| if err == io.EOF { | |||||
| break | |||||
| } | |||||
| if err != nil { | |||||
| panic(err) | |||||
| } | |||||
| var output []byte | |||||
| output, err = json.Marshal(data) | |||||
| if err != nil { | |||||
| panic(err) | |||||
| } | |||||
| fmt.Printf("%s\r\n", output) | |||||
| } | |||||
| } | |||||
| @ -0,0 +1 @@ | |||||
| package jsonstream | |||||
| @ -0,0 +1,34 @@ | |||||
| package jsonstream | |||||
| import ( | |||||
| "bufio" | |||||
| "encoding/json" | |||||
| "errors" | |||||
| "io" | |||||
| ) | |||||
| type Reader struct { | |||||
| buffer *bufio.Reader | |||||
| } | |||||
| func NewReader(r io.Reader) *Reader { | |||||
| return &Reader{ | |||||
| buffer: bufio.NewReader(r), | |||||
| } | |||||
| } | |||||
| func (reader *Reader) ReadLine() (data interface{}, err error) { | |||||
| var line []byte | |||||
| var isPrefix bool | |||||
| line, isPrefix, err = reader.buffer.ReadLine() | |||||
| if isPrefix { | |||||
| err = errors.New("Line exceeds the length of the buffer") | |||||
| } | |||||
| if err == nil { | |||||
| err = json.Unmarshal(line, &data) | |||||
| } | |||||
| return data, err | |||||
| } | |||||