Fast JSON encoder/decoder compatible with encoding/json for Go
Go to file
Cuong Manh Le e58b1eabaf
Remove all usages of reflect.SliceHeader
There're some problem with current usage of reflect.SliceHeader.

First, it violates the unsafe pointer conversion (rule 6th), that said,
reflect.SliceHeader must not used as plain struct.

Second, the lowest version that go-json supports, go1.12, reflect
package did not use SliceHeader in typedslicecopy, but use the safety
version. There's no reason that go-json continue using them.

See:

 - https://golang.org/pkg/unsafe/#Pointer
 - https://github.com/golang/go/blob/release-branch.go1.12/src/reflect/value.go#L2702
2020-11-16 20:33:49 +07:00
.github/workflows Create go.yml 2020-04-26 12:11:35 +09:00
benchmarks Add benchmark 2020-09-15 23:40:31 +09:00
cmd/generator Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
LICENSE Initial commit 2020-04-19 18:32:37 +09:00
README.md Update README.md 2020-09-09 17:11:28 +09:00
compact.go Fix MarshalJSON/MarshalText 2020-08-18 13:36:36 +09:00
decode.go Fix decoding of recursive type 2020-08-25 17:18:37 +09:00
decode_array.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_bool.go Fix Compact 2020-08-14 18:18:32 +09:00
decode_compile.go Fix decoding of recursive type 2020-08-25 17:18:37 +09:00
decode_context.go Add benchmark for medium struct 2020-07-31 20:24:39 +09:00
decode_float.go Add validation for decode_float 2020-08-25 00:56:01 +09:00
decode_int.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_interface.go Refactor 2020-08-25 11:18:01 +09:00
decode_map.go Keep reference of interface value 2020-09-17 21:48:39 +09:00
decode_number.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_ptr.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_slice.go Remove all usages of reflect.SliceHeader 2020-11-16 20:33:49 +07:00
decode_stream.go Refactor 2020-08-14 18:26:42 +09:00
decode_string.go Fix decoder for string tag 2020-08-20 12:38:50 +09:00
decode_struct.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_test.go Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
decode_uint.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_unmarshal_json.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_unmarshal_text.go Copy unquoteBytes from encoding/json and use it for UnmarshalText 2020-08-27 21:00:49 +09:00
decode_wrapped_string.go Fix decoder for string tag 2020-08-20 12:38:50 +09:00
encode.go Fix handling of comma as delimiter 2020-11-16 19:16:45 +09:00
encode_compile.go Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
encode_context.go Remove all usages of reflect.SliceHeader 2020-11-16 20:33:49 +07:00
encode_map112.go Fix build 2020-04-26 12:49:54 +09:00
encode_map113.go Fix build 2020-04-26 12:49:54 +09:00
encode_opcode.go Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
encode_optype.go Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
encode_string.go Improve performance of encodeEscapedString 2020-09-26 23:18:33 +09:00
encode_test.go Enable switch map processing at runtime 2020-09-16 18:15:47 +09:00
encode_vm.go Remove all usages of reflect.SliceHeader 2020-11-16 20:33:49 +07:00
error.go Add test cases for MarshalJSON and MarshalText 2020-08-19 00:32:45 +09:00
example_marshaling_test.go Add examples 2020-08-27 21:02:44 +09:00
example_test.go Omit map example because currently cannot sort map by keys 2020-08-27 21:13:36 +09:00
example_text_marshaling_test.go Fix pointer fields 2020-09-17 21:50:27 +09:00
export_test.go Add test cases for MarshalJSON and MarshalText 2020-08-19 00:32:45 +09:00
go.mod Removed dependency on xerrors 2020-05-09 01:49:37 +09:00
go.sum Removed dependency on xerrors 2020-05-09 01:49:37 +09:00
helper_test.go Fix null value for struct field 2020-08-08 13:20:42 +09:00
indent.go Fix encoding for Indent/MarshalIndent 2020-08-27 21:01:53 +09:00
json.go Fix recursive anonymous field 2020-11-16 21:28:33 +09:00
json_test.go Revert json_test.go 2020-09-04 21:46:16 +09:00
number_test.go Add test cases 2020-08-25 00:56:23 +09:00
option.go Add option.go 2020-09-16 18:23:43 +09:00
rtype.go Fix MarshalJSON/MarshalText 2020-08-18 13:36:36 +09:00
stream_test.go Fix stream encoding 2020-09-17 01:26:39 +09:00
struct_field.go Fix stream encoding 2020-09-17 01:26:39 +09:00
tagkey_test.go Fix test case 2020-09-17 10:53:39 +09:00

README.md

go-json

Go GoDoc

Fast JSON encoder/decoder compatible with encoding/json for Go

Installation

go get github.com/goccy/go-json

How to use

Replace import statement from encoding/json to github.com/goccy/go-json

-import "encoding/json"
+import "github.com/goccy/go-json"

Benchmarks

$ cd benchmarks
$ go test -bench .

Encode

Fastest

SmallStruct

MediumStruct

LargeStruct

Decode

So faster than json-iterator/go

json.Unmarshal

SmallStruct

MediumStruct

LargeStruct

Stream Decode

SmallStruct

MediumStruct

LargeStruct

Status

Type

Currently supported all types

API

Implements All APIs

Error

  • InvalidUTF8Error
  • InvalidUnmarshalError
  • MarshalerError
  • SyntaxError
  • UnmarshalFieldError
  • UnmarshalTypeError
  • UnsupportedTypeError
  • UnsupportedValueError

License

MIT