From 139f30d96077663dfe030069073ee632930627ec Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sat, 7 Nov 2015 07:48:56 -0500 Subject: [PATCH] initial commit --- cmd/jsonstream.go | 38 ++++++++++++++++++++++++++++++++++++++ jsonstream.go | 1 + reader.go | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 cmd/jsonstream.go create mode 100644 jsonstream.go create mode 100644 reader.go diff --git a/cmd/jsonstream.go b/cmd/jsonstream.go new file mode 100644 index 0000000..493c06b --- /dev/null +++ b/cmd/jsonstream.go @@ -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) + } +} diff --git a/jsonstream.go b/jsonstream.go new file mode 100644 index 0000000..02291ec --- /dev/null +++ b/jsonstream.go @@ -0,0 +1 @@ +package jsonstream diff --git a/reader.go b/reader.go new file mode 100644 index 0000000..bd7ab79 --- /dev/null +++ b/reader.go @@ -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 +}