1
0
mirror of https://github.com/json-iterator/go.git synced 2024-11-24 08:22:14 +02:00
A high-performance 100% compatible drop-in replacement of "encoding/json" http://jsoniter.com/migrate-from-go-std.html
Go to file
2016-12-05 10:49:33 +08:00
jsoniter_adapter.go adapter 2016-12-04 22:50:53 +08:00
jsoniter_array_test.go support array 2016-12-01 13:53:40 +08:00
jsoniter_bool_test.go support null/true/false 2016-12-02 11:22:20 +08:00
jsoniter_float_test.go support float 2016-12-01 23:25:29 +08:00
jsoniter_int_test.go merge lexer with iterator 2016-12-01 10:35:38 +08:00
jsoniter_io_test.go merge lexer with iterator 2016-12-01 10:35:38 +08:00
jsoniter_large_file_test.go support null/true/false 2016-12-02 11:22:20 +08:00
jsoniter_nested_test.go support null/true/false 2016-12-02 11:22:20 +08:00
jsoniter_null_test.go support null/true/false 2016-12-02 11:22:20 +08:00
jsoniter_object_test.go reflect string 2016-12-04 11:06:38 +08:00
jsoniter_reflect_test.go support string conversion 2016-12-04 22:45:20 +08:00
jsoniter_reflect.go support string conversion 2016-12-04 22:45:20 +08:00
jsoniter_skip_test.go reflect string 2016-12-04 11:06:38 +08:00
jsoniter_string_test.go merge lexer with iterator 2016-12-01 10:35:38 +08:00
jsoniter.go skip tab; add CurrentBuffer() to allow debug 2016-12-05 10:43:42 +08:00
LICENSE Initial commit 2016-11-30 08:30:24 +08:00
README.md update README 2016-12-05 10:49:33 +08:00

json iterator (jsoniter)

faster than DOM, more usable than SAX/StAX

for performance numbers, see https://github.com/json-iterator/go-benchmark

DOM style api

type StructOfTag struct {
	field1 string `json:"field-1"`
	field2 string `json:"-"`
	field3 int `json:",string"`
}

func Test_reflect_struct_tag_field(t *testing.T) {
	err := jsoniter.Unmarshal(`{"field-1": "hello", "field2": "", "field3": "100"}`, &struct_)
	if struct_.field1 != "hello" {
		fmt.Println(err)
		t.Fatal(struct_.field1)
	}
	if struct_.field2 != "world" {
		fmt.Println(err)
		t.Fatal(struct_.field2)
	}
	if struct_.field3 != 100 {
		fmt.Println(err)
		t.Fatal(struct_.field3)
	}
}

StAX style api

Array

iter := jsoniter.ParseString(`[1,2,3]`)
for iter.ReadArray() {
  iter.ReadUint64()
}

Object

type TestObj struct {
    Field1 string
    Field2 uint64
}
iter := jsoniter.ParseString(`{"field1": "1", "field2": 2}`)
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")
    }
}

Skip

iter := jsoniter.ParseString(`[ {"a" : [{"b": "c"}], "d": 102 }, "b"]`)
iter.ReadArray()
iter.Skip()
iter.ReadArray()
if iter.ReadString() != "b" {
    t.FailNow()
}