aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/json
AgeCommit message (Collapse)Author
2015-10-14encoding/json: simplify encodeState.{string, stringBytes}Nodir Turakulov
As correctly mentioned in #11883, encodeState.string and encodeState.stringBytes never return an error. This CL removes the error from the function signatures and somewhat simplifies call sites. Fixes #11883 Change-Id: I1d1853d09631c545b68b5eea86ff7daa2e0ca10b Reviewed-on: https://go-review.googlesource.com/15836 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2015-09-28encoding/json: document that encoding.TextMarshaler is used if no (json) ↵Robert Griesemer
Marshaler is present Change-Id: I63da54832548c325e47dc54aaa5b5112e1f3b3ba Reviewed-on: https://go-review.googlesource.com/15048 Reviewed-by: Rob Pike <r@golang.org>
2015-09-23encoding/json: spell "marshaling" and "unmarshaling" consistentlyAndrew Gerrand
Fixes #12431 Change-Id: I67c42bf2cd9285f471387248fd9c22a16b158349 Reviewed-on: https://go-review.googlesource.com/14150 Reviewed-by: Dmitri Shuralyov <shurcool@gmail.com> Reviewed-by: Rob Pike <r@golang.org>
2015-09-21encoding/json: scanner: use byte, more consistentMarvin Stenger
The fields step and redoState of struct scanner are now defined as `func(s *scanner, c byte) int` instead of `func(s *scanner, c int) int`, since bytes are sufficient. Further changes improve the consistency in the scanner.go file. Change-Id: Ifb85f2130d728d2b936d79914d87a1f0b5c6ee7d Reviewed-on: https://go-review.googlesource.com/14801 Reviewed-by: Andrew Gerrand <adg@golang.org> Run-TryBot: Andrew Gerrand <adg@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-07-30encoding/json: revert "fix decoding of JSON null values"Russ Cox
Fixes #11912. Fixes #11937. This reverts commit 1a99ba55df902a2657d1ccfc52a60024c22dba98. Change-Id: I32b76053fdabc59f28ca5bedf1b15c0baa8afae1 Reviewed-on: https://go-review.googlesource.com/12893 Reviewed-by: Didier Spezia <didier.06@gmail.com> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2015-07-28encoding/json: test style tweaksBrad Fitzpatrick
Rename test name from Http to HTTP, and fix some style nits. Change-Id: I00fe1cecd69ca2f50be86a76ec90031c2f921707 Reviewed-on: https://go-review.googlesource.com/12760 Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-07-28encoding/json: take new decoder code off Decode path completelyRuss Cox
The new Token API is meant to sit on the side of the Decoder, so that you only get the new code (and any latent bugs in it) if you are actively using the Token API. The unconditional use of dec.peek in dec.tokenPrepareForDecode violates that intention. Change tokenPrepareForDecode not to call dec.peek unless needed (because the Token API has advanced the state). This restores the old code path behavior, no peeking allowed. I checked by patching in the new tests from CL 12726 that this change suffices to "fix" the error handling bug in dec.peek. Obviously that bug should be fixed too, but the point is that with this CL, bugs in dec.peek do not affect plain use of Decode or Unmarshal. I also checked by putting a panic in dec.peek that the only tests that now invoke peek are: TestDecodeInStream ExampleDecoder_Token ExampleDecoder_Decode_stream and those tests all invoke dec.Token directly. Change-Id: I0b242d0cb54a9c830548644670dc5ab5ccef69f2 Reviewed-on: https://go-review.googlesource.com/12740 Reviewed-by: Andrew Gerrand <adg@golang.org> Reviewed-by: Peter Waldschmidt <peter@waldschmidt.com>
2015-07-28encoding/json: fix EOF bug decoding HTTP streamPeter Waldschmidt
Fixes bug referenced in this thread on golang-dev: https://groups.google.com/d/topic/golang-dev/U4LSpMzL82c/discussion Change-Id: If01a2644863f9e5625dd2f95f9d344bda772e12c Reviewed-on: https://go-review.googlesource.com/12726 Reviewed-by: Russ Cox <rsc@golang.org>
2015-07-27encoding/json: add JSON streaming parse APIPeter Waldschmidt
This change adds new methods to Decoder. * Decoder.Token steps through a JSON document, returning a value for each token. * Decoder.Decode unmarshals the entire value at the token stream's current position (in addition to its existing function in a stream of JSON values) Fixes #6050. Fixes #6499. Change-Id: Iff283e0e7b537221ae256392aca6529f06ebe211 Reviewed-on: https://go-review.googlesource.com/9073 Reviewed-by: Russ Cox <rsc@golang.org>
2015-07-22encoding/json: fix decoding of JSON null valuesDidier Spezia
JSON decoding currently fails for null values bound to any type which does implement the JSON Unmarshaler interface without checking for null values (such as time.Time). It also fails for types implementing the TextUnmarshaler interface. The expected behavior of the JSON decoding engine in such case is to process null by keeping the value unchanged without producing any error. Make sure null values are handled by the decoding engine itself, and never passed to the UnmarshalText or UnmarshalJSON methods. Fixes #9037 Change-Id: I261d85587ba543ef6f1815555b2af9311034d5bb Reviewed-on: https://go-review.googlesource.com/9376 Reviewed-by: Russ Cox <rsc@golang.org>
2015-07-15encoding/json: document and test overwrite of slice, map during UnmarshalRuss Cox
Fixes #8837. Change-Id: Iaaecbb0b324004cb74b16b764126b01315e6a16e Reviewed-on: https://go-review.googlesource.com/12209 Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-07-15encoding/json: fix out of phase error unmarshaling non-string into ↵Russ Cox
TextUnmarshaler Fixes #9650. Change-Id: I45b879124691e485b86c1e99a3227032283850d2 Reviewed-on: https://go-review.googlesource.com/12208 Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-07-15encoding/json: Only allow string option for valid typesLarz Conwell
The "string" option only applies for strings, floats, integers, and booleans as per the documentation. So when decoding ignore the "string" option if the value is not of one of the types mentioned. This matches the Marshal step which also ignores the "string" option for invalid types. Fixes #9812 Change-Id: I0fb2b43d0668bc0e2985886d989abbf2252070e2 Reviewed-on: https://go-review.googlesource.com/10183 Reviewed-by: Russ Cox <rsc@golang.org>
2015-07-12all: link to https for golang subdomains tooBrad Fitzpatrick
The previous commit (git 2ae77376) just did golang.org. This one includes golang.org subdomains like blog, play, and build. Change-Id: I4469f7b307ae2a12ea89323422044e604c5133ae Reviewed-on: https://go-review.googlesource.com/12071 Reviewed-by: Rob Pike <r@golang.org>
2015-07-11all: link to https instead of httpBrad Fitzpatrick
The one in misc/makerelease/makerelease.go is particularly bad and probably warrants rotating our keys. I didn't update old weekly notes, and reverted some changes involving test code for now, since we're late in the Go 1.5 freeze. Otherwise, the rest are all auto-generated changes, and all manually reviewed. Change-Id: Ia2753576ab5d64826a167d259f48a2f50508792d Reviewed-on: https://go-review.googlesource.com/12048 Reviewed-by: Rob Pike <r@golang.org>
2015-06-18encoding/json: Remove extra allocation in scanner.Peter Waldschmidt
When the scanner receives a non-whitespace character in stateEndTop, it creates an error message and caches it to return on the next transition. nextValue() uses the scanner to sub-scan for a value inside a larger JSON structure. Since stateEndTop is triggered *after* the ending byte, whatever character immediately follows the sub-value gets pulled into the scanner's state machine as well. Even though it is not used and doesn't cause an error, it does cause the state machine to allocate an error that will never be used. The fix is to probe the state machine with whitespace after scanEndObject or scanEndArray to see if the next character would result in a scanEnd state transition. If so, we can return right away without processing the next character and avoid triggering an allocation. benchmark old ns/op new ns/op delta BenchmarkCodeEncoder 17022194 16611336 -2.41% BenchmarkCodeMarshal 18443250 18090144 -1.91% BenchmarkCodeDecoder 61502053 61010936 -0.80% BenchmarkCodeUnmarshal 61410829 60363605 -1.71% BenchmarkCodeUnmarshalReuse 59124836 58361772 -1.29% BenchmarkUnmarshalString 602 603 +0.17% BenchmarkUnmarshalFloat64 535 537 +0.37% BenchmarkUnmarshalInt64 482 482 +0.00% BenchmarkIssue10335 1206 799 -33.75% BenchmarkSkipValue 17605751 18355391 +4.26% BenchmarkEncoderEncode 612 604 -1.31% benchmark old MB/s new MB/s speedup BenchmarkCodeEncoder 114.00 116.82 1.02x BenchmarkCodeMarshal 105.21 107.27 1.02x BenchmarkCodeDecoder 31.55 31.81 1.01x BenchmarkCodeUnmarshal 31.60 32.15 1.02x BenchmarkSkipValue 111.63 107.07 0.96x benchmark old allocs new allocs delta BenchmarkIssue10335 11 4 -63.64% BenchmarkEncoderEncode 2 2 +0.00% benchmark old bytes new bytes delta BenchmarkIssue10335 376 272 -27.66% BenchmarkEncoderEncode 40 40 +0.00% Fixes #10335 Change-Id: I3d4f2b67f7a038adfb33ba48bb6b680f528baf18 Reviewed-on: https://go-review.googlesource.com/9074 Reviewed-by: Russ Cox <rsc@golang.org>
2015-05-15encoding/json: fix decoding of types with '[]byte' as underlying typeHåvard Haugen
All slice types which have elements of kind reflect.Uint8 are marshalled into base64 for compactness. When decoding such data into a custom type based on []byte the decoder checked the slice kind instead of the slice element kind, so no appropriate decoder was found. Fixed by letting the decoder check slice element kind like the encoder. This guarantees that already encoded data can still be successfully decoded. Fixes #8962. Change-Id: Ia320d4dc2c6e9e5fe6d8dc15788c81da23d20c4f Reviewed-on: https://go-review.googlesource.com/9371 Reviewed-by: Peter Waldschmidt <peter@waldschmidt.com> Reviewed-by: Russ Cox <rsc@golang.org>
2015-05-14encoding/json: make BenchmarkSkipValue more stableJosh Bleecher Snyder
BenchmarkSkipValue was sensitive to the value of b.N due to its significant startup cost. Two adjacent runs before this CL: BenchmarkSkipValue 50 21047499 ns/op 93.37 MB/s BenchmarkSkipValue 100 17260554 ns/op 118.05 MB/s After this CL, using benchtime to recreate the difference in b.N: BenchmarkSkipValue 50 15204797 ns/op 131.67 MB/s BenchmarkSkipValue 100 15332319 ns/op 130.58 MB/s Change-Id: Iac86f86dd774d535302fa5e4c08f89f8da00be9e Reviewed-on: https://go-review.googlesource.com/10053 Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-02-18encoding/json: Fixed the comment specifying Marshal behavior for maps.Aaron Jacobs
The comment previously was reversed in sense (it appeared to be describing unmarshaling). I've fixed that, and added the caveat that map keys are subject to UTF-8 coercion like other strings. Change-Id: Id08082aa71401a6e7530a42f979fbb50bd1f4e6a Reviewed-on: https://go-review.googlesource.com/5221 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org>
2015-01-29encoding/json: add UnmarshalTypeError.OffsetAlex Plugaru
Fixes #9693 Change-Id: Ibf07199729bfc883b2a7e051cafd98185f912acd Reviewed-on: https://go-review.googlesource.com/3283 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2014-12-28encoding/json: address go vet reportsEmil Hessman
The error message for decoding a unquoted value into a struct field with the ,string option specified has two arguments when one is needed. Make the error message take one argument and add a test in order to cover the case when a unquoted value is specified. Also add error value as the missing argument for Fatalf call in test. Fixes the following go vet reports: decode.go:602: wrong number of args for format in Errorf call: 1 needed but 2 args decode_test.go:1088: missing argument for Fatalf("%v"): format reads arg 1, have only 0 args Change-Id: Id036e10c54c4a7c1ee9952f6910858ecc2b84134 Reviewed-on: https://go-review.googlesource.com/2109 Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
2014-12-14encoding/json: mention that the "string" tag applies to booleansAndrew Gerrand
Fixes #9284 Change-Id: I0410a9ed82b861686a0a986c9ca4eeeacac8f296 Reviewed-on: https://go-review.googlesource.com/1534 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2014-10-27encoding/json: encode \t as \t instead of \u0009Russ Cox
Shorter and easier to read form for a common character. LGTM=bradfitz R=adg, bradfitz CC=golang-codereviews, zimmski https://golang.org/cl/162340043
2014-10-07encoding/json: fix handling of null with ,string fieldsRuss Cox
Fixes #8587. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews, iant, r https://golang.org/cl/152270044
2014-10-06encoding/json: document that embedded interfaces look like non-embedded onesRuss Cox
Fixes #8386. LGTM=r R=golang-codereviews, r CC=golang-codereviews, iant https://golang.org/cl/149570043
2014-10-01encoding/json: don't panic on incorrect map argumentRobert Griesemer
Fixes #8305. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/145680044
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.