Last active
January 9, 2021 04:25
-
-
Save iOliverNguyen/763615e7e256221e0f86e495afd1770b to your computer and use it in GitHub Desktop.
ujson: examples
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 "fmt" | |
import "github.com/olvrng/ujson" | |
func main() { | |
input0 := []byte(`true`) | |
ujson.Walk(input0, func(level int, key, value []byte) bool { | |
fmt.Printf("level=%v key=%s value=%s\n", level, key, value) | |
return true | |
}) | |
// output: | |
// level=0 key= value=true | |
input1 := []byte(`{ "key": 42 }`) | |
ujson.Walk(input1, func(level int, key, value []byte) bool { | |
fmt.Printf("level=%v key=%s value=%s\n", level, key, value) | |
return true | |
}) | |
// output: | |
// level=0 key= value={ | |
// level=1 key="key" value=42 | |
// level=0 key= value=} | |
input2 := []byte(`[ true ]`) | |
ujson.Walk(input2, func(level int, key, value []byte) bool { | |
fmt.Printf("level=%v key=%s value=%s\n", level, key, value) | |
return true | |
}) | |
// output: | |
// level=0 key= value=[ | |
// level=1 key= value=true | |
// level=0 key= value=] | |
} |
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 "fmt" | |
import "github.com/olvrng/ujson" | |
func main() { | |
input := []byte(`{ | |
"id": 12345, | |
"name": "foo", | |
"numbers": ["one", "two"], | |
"tags": {"color": "red", "priority": "high"}, | |
"active": true | |
}`) | |
ujson.Walk(input, func(level int, key, value []byte) bool { | |
fmt.Printf("%2v% 12s : %s\n", level, key, value) | |
return true | |
}) | |
} |
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
0 : { | |
1 "id" : 12345 | |
1 "name" : "foo" | |
1 "numbers" : [ | |
2 : "one" | |
2 : "two" | |
1 : ] | |
1 "tags" : { | |
2 "color" : "red" | |
2 "priority" : "high" | |
1 : } | |
1 "active" : true | |
0 : } |
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 "fmt" | |
import "github.com/olvrng/ujson" | |
func main() { | |
input := []byte(`{"id":12345,"name":"foo","numbers":["one","two"],"tags":{"color":"red","priority":"high"},"active":true}`) | |
b := make([]byte, 0, 1024) | |
err := ujson.Walk(input, func(level int, key, value []byte) bool { | |
if len(b) != 0 && ujson.ShouldAddComma(value, b[len(b)-1]) { | |
b = append(b, ',') | |
} | |
b = append(b, '\n') | |
for i := 0; i < level; i++ { | |
b = append(b, '\t') | |
} | |
if len(key) > 0 { | |
b = append(b, key...) | |
b = append(b, `: `...) | |
} | |
b = append(b, value...) | |
return true | |
}) | |
if err != nil { | |
panic(err) | |
} | |
fmt.Printf("%s\n", b) | |
} |
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
{ | |
"id": 12345, | |
"name": "foo", | |
"numbers": [ | |
"one", | |
"two" | |
], | |
"tags": { | |
"color": "red", | |
"priority": "high" | |
}, | |
"active": true | |
} |
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" | |
import "fmt" | |
import "github.com/olvrng/ujson" | |
func main() { | |
input := []byte(`{ | |
"id": 12345, | |
"name": "foo", | |
"numbers": ["one", "two"], | |
"tags": {"color": "red", "priority": "high"}, | |
"active": true | |
}`) | |
blacklistFields := [][]byte{ | |
[]byte(`"numbers"`), // note the quotes | |
[]byte(`"active"`), | |
} | |
b := make([]byte, 0, 1024) | |
err := ujson.Walk(input, func(_ int, key, value []byte) bool { | |
for _, blacklist := range blacklistFields { | |
if bytes.Equal(key, blacklist) { | |
// remove the key and value from the output | |
return false | |
} | |
} | |
// write to output | |
if len(b) != 0 && ujson.ShouldAddComma(value, b[len(b)-1]) { | |
b = append(b, ',') | |
} | |
if len(key) > 0 { | |
b = append(b, key...) | |
b = append(b, ':') | |
} | |
b = append(b, value...) | |
return true | |
}) | |
if err != nil { | |
panic(err) | |
} | |
fmt.Printf("%s\n", b) | |
} |
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
{ | |
"responseHeader": { | |
"status": 0, | |
"QTime": 0, | |
"params": { | |
"q": "solo", | |
"wt": "json" | |
} | |
}, | |
"response": { | |
"numFound": 2, | |
"start": 0, | |
"docs": [ | |
{ "name": "foo" }, | |
{ "name": "bar" } | |
] | |
} | |
} |
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
{"id":12345,"name":"foo","tags":{"color":"red","priority":"high"}} |
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" | |
import "fmt" | |
import "github.com/olvrng/ujson" | |
func main() { | |
input := []byte(`{"order_id": 12345678901234, "number": 12, "item_id": 12345678905678, "counting": [1,"2",3]}`) | |
suffix := []byte(`_id"`) // note the ending quote " | |
b := make([]byte, 0, 256) | |
err := ujson.Walk(input, func(_ int, key, value []byte) bool { | |
// Test for keys with suffix _id" and value is an int64 number. For valid json, | |
// values will never be empty, so we can safely test only the first byte. | |
shouldWrap := bytes.HasSuffix(key, suffix) && value[0] > '0' && value[0] <= '9' | |
// transform the input, wrap values in double quotes | |
if len(b) != 0 && ujson.ShouldAddComma(value, b[len(b)-1]) { | |
b = append(b, ',') | |
} | |
if len(key) > 0 { | |
b = append(b, key...) | |
b = append(b, ':') | |
} | |
if shouldWrap { | |
b = append(b, '"') | |
} | |
b = append(b, value...) | |
if shouldWrap { | |
b = append(b, '"') | |
} | |
return true | |
}) | |
if err != nil { | |
panic(err) | |
} | |
fmt.Printf("%s\n", b) | |
} |
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
{"order_id":"12345678901234","number":12,"item_id":"12345678905678","counting":[1,"2",3]} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment