Skip to content

Instantly share code, notes, and snippets.

@swdunlop
Created December 4, 2012 18:44
Show Gist options
  • Save swdunlop/4207357 to your computer and use it in GitHub Desktop.
Save swdunlop/4207357 to your computer and use it in GitHub Desktop.
Dumps Go text/scanner tokens to stdout as JSON
package main
import (
"encoding/json"
"os"
"text/scanner"
)
type Token struct {
Position scanner.Position `json:"pos"`
Text string `json:"text"`
Rune rune `json:"rune"`
}
func main() {
var j = json.NewEncoder(os.Stdout)
var s scanner.Scanner
s.Mode = scanner.GoTokens
s.Init(os.Stdin)
var t Token
for {
r := s.Scan()
switch r {
case scanner.EOF:
return
}
t.Rune = r
t.Text = s.TokenText()
t.Position = s.Pos()
j.Encode(&t)
}
}
@swdunlop
Copy link
Author

swdunlop commented Dec 4, 2012

For echo '{a:"alpha", b:1}' | go run scandump.go, output is:

{"pos":{"Filename":"","Offset":1,"Line":1,"Column":2},"text":"{","rune":123}
{"pos":{"Filename":"","Offset":2,"Line":1,"Column":3},"text":"a","rune":-2}
{"pos":{"Filename":"","Offset":3,"Line":1,"Column":4},"text":":","rune":58}
{"pos":{"Filename":"","Offset":10,"Line":1,"Column":11},"text":"\"alpha\"","rune":-6}
{"pos":{"Filename":"","Offset":11,"Line":1,"Column":12},"text":",","rune":44}
{"pos":{"Filename":"","Offset":13,"Line":1,"Column":14},"text":"b","rune":-2}
{"pos":{"Filename":"","Offset":14,"Line":1,"Column":15},"text":":","rune":58}
{"pos":{"Filename":"","Offset":15,"Line":1,"Column":16},"text":"1","rune":-3}
{"pos":{"Filename":"","Offset":16,"Line":1,"Column":17},"text":"}","rune":125}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment