This repository is no longer to develop.
tson
tson is JSON viewer and editor written in Go.
This tool displays JSON as a tree and you can search and edit key or values.

Support OS
Installation
$ git clone https://github.com/skanehira/tson
$ cd tson && go install
Usage
# from file
$ tson < test.json
# from pipe
$ curl -X POST http://gorilla/likes/regist | tson
# from url(only can use http get mthod)
$ tson -url http://gorilla/likes/json
Use tson as a library in your application
You can use tson in your application as following.
package main
import (
"fmt"
tson "github.com/skanehira/tson/lib"
)
func main() {
j := []byte(`{"name":"gorilla"}`)
// tson.Edit([]byte) will return []byte, error
res, err := tson.Edit(j)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Keybinding
JSON tree
| key |
description |
| j |
move down |
| k |
move up |
| g |
move to the top |
| G |
move to the bottom |
| ctrl-f |
page up |
| ctrl-b |
page down |
| h |
hide current node |
| H |
collaspe value nodes |
| l |
expand current node |
| L |
expand all nodes |
| r |
read from file |
| s |
save to file |
| a |
add new node |
| A |
add new value |
| d |
clear children nodes |
| e |
edit json with $EDITOR |
| q |
quit tson |
| Enter |
edit node |
| / or f |
search nodes |
| ? |
show helps |
| space |
expand/collaspe children nodes |
| ctrl-j |
move to next parent node |
| ctrk-k |
move to next previous node |
| ctrl-c |
quit tson |
help
| key |
description |
| j |
move down |
| k |
move up |
| g |
move to the top |
| G |
move to the bottom |
| ctrl-f |
page up |
| ctrl-b |
page down |
| q |
close help |
About editing nodes
When editing a node value, the JSON value type is determined based on the value.
For example, after inputed 10.5 and saving the JSON to a file, it will be output as a float type 10.5.
If the value sorround with ", it will be output as string type always.
The following is a list of conversion rules.
| input value |
json type |
gorilla |
string |
10.5 |
float |
5 |
int |
true or false |
boolean |
null |
null |
"10" or "true" |
string |
About adding new node
You can use a to add new node with raw json string.
For expample, you have following tree.
{array} <- your cursor in there
├──a
├──b
└──c
If you input {"name":"gorilla"} and press add button,
then you will get new tree as following.
{array} <- your cursor in there
├──a
├──b
├──c
└──{object}
└──name
└──gorilla
Also, You can use A to add new value to current node.
For example, you have following tree.
{object} <- your cursor in there
└──name
└──gorilla
If you input {"age": 26} and press add button,
then you will get new tree as following.
{object} <- your cursor in there
├──name
│ └──gorilla
└──age
└──26
Author
skanehira