New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
json: AppendTimeLayout should add field separators #799
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
In #786, we added support for improving the performance of encoding time by allowing encoder implementations to implement AppendTimeLayout. If the encoder implements, `AppendTimeLayout(time.Time, string)`, some of the time encoders shipped with Zap will use that method, which in turn can make use of `Buffer.AppendTime`. That change inadvertently broke the JSON output for arrays of time that make use of that functionality. Compare the old version of AppendTimeLayout with AppendString (both operations append a string to the array). func (enc *jsonEncoder) AppendString(val string) { enc.addElementSeparator() enc.buf.AppendByte('"') // ... } func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) { enc.buf.AppendByte('"') // ... } Without the `enc.addElementSeparator` call, `AppendTimeLayout` does not include the `,` separator between array elements, instead yielding the following. ["2001-12-19T00:00:00Z""2002-12-18T00:00:00Z""2003-12-17T00:00:00Z"] Fixes #798
Codecov Report
@@ Coverage Diff @@
## master #799 +/- ##
=======================================
Coverage 98.31% 98.31%
=======================================
Files 43 43
Lines 2310 2311 +1
=======================================
+ Hits 2271 2272 +1
Misses 32 32
Partials 7 7
Continue to review full report at Codecov.
|
prashantv
approved these changes
Mar 13, 2020
Thanks for fixing my bug and adding tests to make sure this is caught in future!
cgxxv
pushed a commit
to cgxxv/zap
that referenced
this issue
Mar 25, 2022
In uber-go#786, we added support for improving the performance of encoding time by allowing encoder implementations to implement AppendTimeLayout. If the encoder implements, `AppendTimeLayout(time.Time, string)`, some of the time encoders shipped with Zap will use that method, which in turn can make use of `Buffer.AppendTime`. That change inadvertently broke the JSON output for arrays of time that make use of that functionality. Compare the old version of AppendTimeLayout with AppendString (both operations append a string to the array). func (enc *jsonEncoder) AppendString(val string) { enc.addElementSeparator() enc.buf.AppendByte('"') // ... } func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) { enc.buf.AppendByte('"') // ... } Without the `enc.addElementSeparator` call, `AppendTimeLayout` does not include the `,` separator between array elements, instead yielding the following. ["2001-12-19T00:00:00Z""2002-12-18T00:00:00Z""2003-12-17T00:00:00Z"] Fixes uber-go#798
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
In #786, we added support for improving the performance of encoding time
by allowing encoder implementations to implement AppendTimeLayout.
If the encoder implements,
AppendTimeLayout(time.Time, string)
, someof the time encoders shipped with Zap will use that method, which in
turn can make use of
Buffer.AppendTime
.That change inadvertently broke the JSON output for arrays of time that
make use of that functionality.
Compare the old version of AppendTimeLayout with AppendString (both
operations append a string to the array).
Without the
enc.addElementSeparator
call,AppendTimeLayout
does notinclude the
,
separator between array elements, instead yielding thefollowing.
Fixes #798