Fast JSON encoder/decoder compatible with encoding/json for Go
Go to file
Cuong Manh Le 6b1d701387
Fix all invalid usages of unsafe.Pointer
Most of the invalid usages due to the conversion from uintptr to
unsafe.Pointer. In general, unsafe.Pointer(p) where p of type uintptr is
considered unsafe.

To fix that, use &p instead of p, then introduce another dereference.
Example, the invalid usage:

	*(*int)(unsafe.Pointer(p)) = int(v)

wil become:

	**(**int)(unsafe.Pointer(&p)) = int(v)

Closes #53
2020-11-16 20:37:12 +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 all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_array.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_bool.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_compile.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07: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 Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_map.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_number.go Fix DisallowUnknownFields 2020-08-14 17:59:49 +09:00
decode_ptr.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_slice.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_stream.go Refactor 2020-08-14 18:26:42 +09:00
decode_string.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07: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 all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_unmarshal_text.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07:00
decode_wrapped_string.go Fix decoder for string tag 2020-08-20 12:38:50 +09:00
encode.go Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +07: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 Fix all invalid usages of unsafe.Pointer 2020-11-16 20:37:12 +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