1
0
mirror of https://github.com/json-iterator/go.git synced 2025-02-04 19:15:23 +02:00
json-iterator/README.md

78 lines
1.4 KiB
Markdown
Raw Normal View History

2016-12-04 23:01:42 +08:00
# json iterator (jsoniter)
2016-12-01 00:56:25 +08:00
2016-12-04 23:01:42 +08:00
faster than DOM, more usable than SAX/StAX
2016-12-01 00:56:25 +08:00
2016-12-04 23:01:42 +08:00
for performance numbers, see https://github.com/json-iterator/go-benchmark
2016-12-01 00:56:25 +08:00
2016-12-04 23:01:42 +08:00
# DOM style api
2016-12-01 00:56:25 +08:00
```
2016-12-04 23:01:42 +08:00
type StructOfTag struct {
field1 string `json:"field-1"`
field2 string `json:"-"`
field3 int `json:",string"`
2016-12-01 00:56:25 +08:00
}
2016-12-04 23:01:42 +08:00
func Test_reflect_struct_tag_field(t *testing.T) {
2016-12-04 23:18:17 +08:00
jsoniter.Unmarshal(`{"field-1": "hello", "field2": "", "field3": "100"}`, &struct_)
2016-12-04 23:01:42 +08:00
if struct_.field1 != "hello" {
fmt.Println(iter.Error)
t.Fatal(struct_.field1)
2016-12-01 00:56:25 +08:00
}
2016-12-04 23:01:42 +08:00
if struct_.field2 != "world" {
fmt.Println(iter.Error)
t.Fatal(struct_.field2)
}
if struct_.field3 != 100 {
fmt.Println(iter.Error)
t.Fatal(struct_.field3)
2016-12-01 00:56:25 +08:00
}
}
```
2016-12-04 23:01:42 +08:00
# StAX style api
2016-12-01 23:25:29 +08:00
2016-12-04 23:01:42 +08:00
Array
2016-12-01 23:25:29 +08:00
```
2016-12-04 23:18:17 +08:00
iter := jsoniter.ParseString(`[1,2,3]`)
2016-12-04 23:01:42 +08:00
for iter.ReadArray() {
iter.ReadUint64()
2016-12-01 23:25:29 +08:00
}
```
2016-12-04 23:01:42 +08:00
Object
2016-12-01 23:25:29 +08:00
```
2016-12-04 23:01:42 +08:00
type TestObj struct {
Field1 string
Field2 uint64
2016-12-01 23:25:29 +08:00
}
```
```
2016-12-04 23:18:17 +08:00
iter := jsoniter.ParseString(`{"field1": "1", "field2": 2}`)
2016-12-04 23:01:42 +08:00
obj := TestObj{}
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
switch field {
case "field1":
obj.Field1 = iter.ReadString()
case "field2":
obj.Field2 = iter.ReadUint64()
default:
iter.ReportError("bind object", "unexpected field")
}
2016-12-01 23:25:29 +08:00
}
```
2016-12-04 23:01:42 +08:00
Skip
2016-12-01 23:25:29 +08:00
```
2016-12-04 23:18:17 +08:00
iter := jsoniter.ParseString(`[ {"a" : [{"b": "c"}], "d": 102 }, "b"]`)
2016-12-04 23:01:42 +08:00
iter.ReadArray()
iter.Skip()
iter.ReadArray()
if iter.ReadString() != "b" {
t.FailNow()
2016-12-01 23:25:29 +08:00
}
2016-12-04 23:01:42 +08:00
```