...
1# v0.10.2 - 2023/03/20
2
3### New features
4
5* Support DebugDOT option for debugging encoder ( #440 )
6
7### Fix bugs
8
9* Fix combination of embedding structure and omitempty option ( #442 )
10
11# v0.10.1 - 2023/03/13
12
13### Fix bugs
14
15* Fix checkptr error for array decoder ( #415 )
16* Fix added buffer size check when decoding key ( #430 )
17* Fix handling of anonymous fields other than struct ( #431 )
18* Fix to not optimize when lower conversion can't handle byte-by-byte ( #432 )
19* Fix a problem that MarshalIndent does not work when UnorderedMap is specified ( #435 )
20* Fix mapDecoder.DecodeStream() for empty objects containing whitespace ( #425 )
21* Fix an issue that could not set the correct NextField for fields in the embedded structure ( #438 )
22
23# v0.10.0 - 2022/11/29
24
25### New features
26
27* Support JSON Path ( #250 )
28
29### Fix bugs
30
31* Fix marshaler for map's key ( #409 )
32
33# v0.9.11 - 2022/08/18
34
35### Fix bugs
36
37* Fix unexpected behavior when buffer ends with backslash ( #383 )
38* Fix stream decoding of escaped character ( #387 )
39
40# v0.9.10 - 2022/07/15
41
42### Fix bugs
43
44* Fix boundary exception of type caching ( #382 )
45
46# v0.9.9 - 2022/07/15
47
48### Fix bugs
49
50* Fix encoding of directed interface with typed nil ( #377 )
51* Fix embedded primitive type encoding using alias ( #378 )
52* Fix slice/array type encoding with types implementing MarshalJSON ( #379 )
53* Fix unicode decoding when the expected buffer state is not met after reading ( #380 )
54
55# v0.9.8 - 2022/06/30
56
57### Fix bugs
58
59* Fix decoding of surrogate-pair ( #365 )
60* Fix handling of embedded primitive type ( #366 )
61* Add validation of escape sequence for decoder ( #367 )
62* Fix stream tokenizing respecting UseNumber ( #369 )
63* Fix encoding when struct pointer type that implements Marshal JSON is embedded ( #375 )
64
65### Improve performance
66
67* Improve performance of linkRecursiveCode ( #368 )
68
69# v0.9.7 - 2022/04/22
70
71### Fix bugs
72
73#### Encoder
74
75* Add filtering process for encoding on slow path ( #355 )
76* Fix encoding of interface{} with pointer type ( #363 )
77
78#### Decoder
79
80* Fix map key decoder that implements UnmarshalJSON ( #353 )
81* Fix decoding of []uint8 type ( #361 )
82
83### New features
84
85* Add DebugWith option for encoder ( #356 )
86
87# v0.9.6 - 2022/03/22
88
89### Fix bugs
90
91* Correct the handling of the minimum value of int type for decoder ( #344 )
92* Fix bugs of stream decoder's bufferSize ( #349 )
93* Add a guard to use typeptr more safely ( #351 )
94
95### Improve decoder performance
96
97* Improve escapeString's performance ( #345 )
98
99### Others
100
101* Update go version for CI ( #347 )
102
103# v0.9.5 - 2022/03/04
104
105### Fix bugs
106
107* Fix panic when decoding time.Time with context ( #328 )
108* Fix reading the next character in buffer to nul consideration ( #338 )
109* Fix incorrect handling on skipValue ( #341 )
110
111### Improve decoder performance
112
113* Improve performance when a payload contains escape sequence ( #334 )
114
115# v0.9.4 - 2022/01/21
116
117* Fix IsNilForMarshaler for string type with omitempty ( #323 )
118* Fix the case where the embedded field is at the end ( #326 )
119
120# v0.9.3 - 2022/01/14
121
122* Fix logic of removing struct field for decoder ( #322 )
123
124# v0.9.2 - 2022/01/14
125
126* Add invalid decoder to delay type error judgment at decode ( #321 )
127
128# v0.9.1 - 2022/01/11
129
130* Fix encoding of MarshalText/MarshalJSON operation with head offset ( #319 )
131
132# v0.9.0 - 2022/01/05
133
134### New feature
135
136* Supports dynamic filtering of struct fields ( #314 )
137
138### Improve encoding performance
139
140* Improve map encoding performance ( #310 )
141* Optimize encoding path for escaped string ( #311 )
142* Add encoding option for performance ( #312 )
143
144### Fix bugs
145
146* Fix panic at encoding map value on 1.18 ( #310 )
147* Fix MarshalIndent for interface type ( #317 )
148
149# v0.8.1 - 2021/12/05
150
151* Fix operation conversion from PtrHead to Head in Recursive type ( #305 )
152
153# v0.8.0 - 2021/12/02
154
155* Fix embedded field conflict behavior ( #300 )
156* Refactor compiler for encoder ( #301 #302 )
157
158# v0.7.10 - 2021/10/16
159
160* Fix conversion from pointer to uint64 ( #294 )
161
162# v0.7.9 - 2021/09/28
163
164* Fix encoding of nil value about interface type that has method ( #291 )
165
166# v0.7.8 - 2021/09/01
167
168* Fix mapassign_faststr for indirect struct type ( #283 )
169* Fix encoding of not empty interface type ( #284 )
170* Fix encoding of empty struct interface type ( #286 )
171
172# v0.7.7 - 2021/08/25
173
174* Fix invalid utf8 on stream decoder ( #279 )
175* Fix buffer length bug on string stream decoder ( #280 )
176
177Thank you @orisano !!
178
179# v0.7.6 - 2021/08/13
180
181* Fix nil slice assignment ( #276 )
182* Improve error message ( #277 )
183
184# v0.7.5 - 2021/08/12
185
186* Fix encoding of embedded struct with tags ( #265 )
187* Fix encoding of embedded struct that isn't first field ( #272 )
188* Fix decoding of binary type with escaped char ( #273 )
189
190# v0.7.4 - 2021/07/06
191
192* Fix encoding of indirect layout structure ( #264 )
193
194# v0.7.3 - 2021/06/29
195
196* Fix encoding of pointer type in empty interface ( #262 )
197
198# v0.7.2 - 2021/06/26
199
200### Fix decoder
201
202* Add decoder for func type to fix decoding of nil function value ( #257 )
203* Fix stream decoding of []byte type ( #258 )
204
205### Performance
206
207* Improve decoding performance of map[string]interface{} type ( use `mapassign_faststr` ) ( #256 )
208* Improve encoding performance of empty interface type ( remove recursive calling of `vm.Run` ) ( #259 )
209
210### Benchmark
211
212* Add bytedance/sonic as benchmark target ( #254 )
213
214# v0.7.1 - 2021/06/18
215
216### Fix decoder
217
218* Fix error when unmarshal empty array ( #253 )
219
220# v0.7.0 - 2021/06/12
221
222### Support context for MarshalJSON and UnmarshalJSON ( #248 )
223
224* json.MarshalContext(context.Context, interface{}, ...json.EncodeOption) ([]byte, error)
225* json.NewEncoder(io.Writer).EncodeContext(context.Context, interface{}, ...json.EncodeOption) error
226* json.UnmarshalContext(context.Context, []byte, interface{}, ...json.DecodeOption) error
227* json.NewDecoder(io.Reader).DecodeContext(context.Context, interface{}) error
228
229```go
230type MarshalerContext interface {
231 MarshalJSON(context.Context) ([]byte, error)
232}
233
234type UnmarshalerContext interface {
235 UnmarshalJSON(context.Context, []byte) error
236}
237```
238
239### Add DecodeFieldPriorityFirstWin option ( #242 )
240
241In the default behavior, go-json, like encoding/json, will reflect the result of the last evaluation when a field with the same name exists. I've added new options to allow you to change this behavior. `json.DecodeFieldPriorityFirstWin` option reflects the result of the first evaluation if a field with the same name exists. This behavior has a performance advantage as it allows the subsequent strings to be skipped if all fields have been evaluated.
242
243### Fix encoder
244
245* Fix indent number contains recursive type ( #249 )
246* Fix encoding of using empty interface as map key ( #244 )
247
248### Fix decoder
249
250* Fix decoding fields containing escaped characters ( #237 )
251
252### Refactor
253
254* Move some tests to subdirectory ( #243 )
255* Refactor package layout for decoder ( #238 )
256
257# v0.6.1 - 2021/06/02
258
259### Fix encoder
260
261* Fix value of totalLength for encoding ( #236 )
262
263# v0.6.0 - 2021/06/01
264
265### Support Colorize option for encoding (#233)
266
267```go
268b, err := json.MarshalWithOption(v, json.Colorize(json.DefaultColorScheme))
269if err != nil {
270 ...
271}
272fmt.Println(string(b)) // print colored json
273```
274
275### Refactor
276
277* Fix opcode layout - Adjust memory layout of the opcode to 128 bytes in a 64-bit environment ( #230 )
278* Refactor encode option ( #231 )
279* Refactor escape string ( #232 )
280
281# v0.5.1 - 2021/5/20
282
283### Optimization
284
285* Add type addrShift to enable bigger encoder/decoder cache ( #213 )
286
287### Fix decoder
288
289* Keep original reference of slice element ( #229 )
290
291### Refactor
292
293* Refactor Debug mode for encoding ( #226 )
294* Generate VM sources for encoding ( #227 )
295* Refactor validator for null/true/false for decoding ( #221 )
296
297# v0.5.0 - 2021/5/9
298
299### Supports using omitempty and string tags at the same time ( #216 )
300
301### Fix decoder
302
303* Fix stream decoder for unicode char ( #215 )
304* Fix decoding of slice element ( #219 )
305* Fix calculating of buffer length for stream decoder ( #220 )
306
307### Refactor
308
309* replace skipWhiteSpace goto by loop ( #212 )
310
311# v0.4.14 - 2021/5/4
312
313### Benchmark
314
315* Add valyala/fastjson to benchmark ( #193 )
316* Add benchmark task for CI ( #211 )
317
318### Fix decoder
319
320* Fix decoding of slice with unmarshal json type ( #198 )
321* Fix decoding of null value for interface type that does not implement Unmarshaler ( #205 )
322* Fix decoding of null value to []byte by json.Unmarshal ( #206 )
323* Fix decoding of backslash char at the end of string ( #207 )
324* Fix stream decoder for null/true/false value ( #208 )
325* Fix stream decoder for slow reader ( #211 )
326
327### Performance
328
329* If cap of slice is enough, reuse slice data for compatibility with encoding/json ( #200 )
330
331# v0.4.13 - 2021/4/20
332
333### Fix json.Compact and json.Indent
334
335* Support validation the input buffer for json.Compact and json.Indent ( #189 )
336* Optimize json.Compact and json.Indent ( improve memory footprint ) ( #190 )
337
338# v0.4.12 - 2021/4/15
339
340### Fix encoder
341
342* Fix unnecessary indent for empty slice type ( #181 )
343* Fix encoding of omitempty feature for the slice or interface type ( #183 )
344* Fix encoding custom types zero values with omitempty when marshaller exists ( #187 )
345
346### Fix decoder
347
348* Fix decoder for invalid top level value ( #184 )
349* Fix decoder for invalid number value ( #185 )
350
351# v0.4.11 - 2021/4/3
352
353* Improve decoder performance for interface type
354
355# v0.4.10 - 2021/4/2
356
357### Fix encoder
358
359* Fixed a bug when encoding slice and map containing recursive structures
360* Fixed a logic to determine if indirect reference
361
362# v0.4.9 - 2021/3/29
363
364### Add debug mode
365
366If you use `json.MarshalWithOption(v, json.Debug())` and `panic` occurred in `go-json`, produces debug information to console.
367
368### Support a new feature to compatible with encoding/json
369
370- invalid UTF-8 is coerced to valid UTF-8 ( without performance down )
371
372### Fix encoder
373
374- Fixed handling of MarshalJSON of function type
375
376### Fix decoding of slice of pointer type
377
378If there is a pointer value, go-json will use it. (This behavior is necessary to achieve the ability to prioritize pre-filled values). However, since slices are reused internally, there was a bug that referred to the previous pointer value. Therefore, it is not necessary to refer to the pointer value in advance for the slice element, so we explicitly initialize slice element by `nil`.
379
380# v0.4.8 - 2021/3/21
381
382### Reduce memory usage at compile time
383
384* go-json have used about 2GB of memory at compile time, but now it can compile with about less than 550MB.
385
386### Fix any encoder's bug
387
388* Add many test cases for encoder
389* Fix composite type ( slice/array/map )
390* Fix pointer types
391* Fix encoding of MarshalJSON or MarshalText or json.Number type
392
393### Refactor encoder
394
395* Change package layout for reducing memory usage at compile
396* Remove anonymous and only operation
397* Remove root property from encodeCompileContext and opcode
398
399### Fix CI
400
401* Add Go 1.16
402* Remove Go 1.13
403* Fix `make cover` task
404
405### Number/Delim/Token/RawMessage use the types defined in encoding/json by type alias
406
407# v0.4.7 - 2021/02/22
408
409### Fix decoder
410
411* Fix decoding of deep recursive structure
412* Fix decoding of embedded unexported pointer field
413* Fix invalid test case
414* Fix decoding of invalid value
415* Fix decoding of prefilled value
416* Fix not being able to return UnmarshalTypeError when it should be returned
417* Fix decoding of null value
418* Fix decoding of type of null string
419* Use pre allocated pointer if exists it at decoding
420
421### Reduce memory usage at compile
422
423* Integrate int/int8/int16/int32/int64 and uint/uint8/uint16/uint32/uint64 operation to reduce memory usage at compile
424
425### Remove unnecessary optype
View as plain text