Fast JSON encoder/decoder compatible with encoding/json for Go
This report summarizes scanner evidence for goccy/go-json, a Go project with 3,757 GitHub stars. SynthScan examined 184,633 lines of code across 520 source files, recording 127 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 0.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 127 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 127 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 127 distinct pattern matches across 2 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | option.go | 81 | type DecodeOptionFunc func(*DecodeOption) | COMMENT |
| LOW | v2_options.go | 1 | package json | COMMENT |
| LOW | v2_options.go | 21 | // MergeWithLegacySemantics, OmitEmptyWithLegacySemantics, ParseBytesWithLooseRFC4648, ParseTimeWithLooseRFC3339, | COMMENT |
| LOW | v2_options.go | 41 | // calls none when marshaling. | COMMENT |
| LOW | v2_options.go | 61 | // rather than a JSON array of its elements; but it is still a JSON array of its elements when marshaling if the | COMMENT |
| LOW | v2_options.go | 81 | func MatchCaseSensitiveDelimiter(v bool) Options { | COMMENT |
| LOW | v2_options.go | 101 | // as a JSON null or an empty JSON string, array or object. | COMMENT |
| LOW | v2_options.go | 121 | func ParseTimeWithLooseRFC3339(v bool) Options { | COMMENT |
| LOW | v2_options.go | 141 | // This affects marshaling and unmarshaling. It is true by default in this package. | COMMENT |
| LOW | decode_footprint_test.go | 21 | // referring to its read buffer, the fragments of Path.Extract referring to a copy of the whole input. | COMMENT |
| LOW | path.go | 1 | package json | COMMENT |
| LOW | json.go | 41 | } | COMMENT |
| LOW | json.go | 61 | // String values encode as JSON strings coerced to valid UTF-8, | COMMENT |
| LOW | json.go | 81 | // comma-separated list of options. The name may be empty in order to | COMMENT |
| LOW | json.go | 101 | // | COMMENT |
| LOW | json.go | 121 | // only Unicode letters, digits, and ASCII punctuation except quotation | COMMENT |
| LOW | json.go | 141 | // 2) If there is exactly one field (tagged or not according to the first rule), that is selected. | COMMENT |
| LOW | json.go | 161 | // Interface values encode as the value contained in the interface. | COMMENT |
| LOW | json.go | 201 | // MarshalIndentWithOption is like Marshal but applies Indent to format the output with EncodeOption. | COMMENT |
| LOW | json.go | 221 | // Unmarshal calls that value's UnmarshalJSON method, including | COMMENT |
| LOW | json.go | 241 | // nil for JSON null | COMMENT |
| LOW | json.go | 261 | // | COMMENT |
| LOW | json.go | 301 | return unmarshal(data, v, optFuncs...) | COMMENT |
| LOW | json.go | 321 | COMMENT | |
| LOW | encode_of.go | 1 | package json | COMMENT |
| LOW | test/example/example_test.go | 101 | fmt.Printf("%T: %v", t, t) | COMMENT |
| LOW | test/example/example_test.go | 261 | var out bytes.Buffer | COMMENT |
| LOW | test/example/example_text_marshaling_test.go | 61 | counts[small], counts[large], counts[unrecognized]) | COMMENT |
| LOW | internal/cmd/benchcheck/bench.go | 161 | // On some machines a benchmark has two clusters of results over the binaries, 20-50% apart: the small encode | COMMENT |
| LOW | internal/cmd/benchcheck/main.go | 1 | // benchcheck detects performance degradation by comparing the benchmark results | COMMENT |
| LOW | internal/cmd/benchcheck/main.go | 41 | "syscall" | COMMENT |
| LOW | internal/cmd/benchcheck/main.go | 281 | COMMENT | |
| LOW | internal/encoder/option.go | 41 | StringifyNumbersOption | COMMENT |
| LOW | internal/encoder/option.go | 61 | // MarshalFuncsOption is the functions of WithMarshalers of encoding/json/v2 ( Option.Funcs ), whose opcodes | COMMENT |
| LOW | internal/encoder/compiler.go | 121 | if set[1].typeptr == key { | COMMENT |
| LOW | internal/encoder/compiler.go | 261 | v2 bool | COMMENT |
| LOW | internal/encoder/compiler.go | 281 | nextIsEmbedded bool | COMMENT |
| LOW | internal/encoder/encoder.go | 81 | // a string, a bool, ... ), or nil. Such a value held by an interface value is encoded without a frame. | COMMENT |
| LOW | internal/encoder/encoder.go | 121 | COMMENT | |
| LOW | internal/encoder/encoder.go | 241 | // StartDetectingCyclesAfter is the number of the frames ( see RuntimeContext.RecursiveLevel ) after which the | COMMENT |
| LOW | internal/encoder/encoder.go | 501 | COMMENT | |
| LOW | internal/encoder/encoder.go | 581 | // SortByEncodedKeys makes the context write the entries in the order of their encoded keys, for a sorted map | COMMENT |
| LOW | internal/encoder/encoder.go | 881 | // addrForMarshaler returns the pointer to the value held by v, to call a marshaler with a pointer receiver. | COMMENT |
| LOW | internal/encoder/code.go | 781 | isNilCheck bool | COMMENT |
| LOW | internal/encoder/marshaler.go | 21 | COMMENT | |
| LOW | internal/encoder/method_v2.go | 21 | var V2Hooks struct { | COMMENT |
| LOW | internal/encoder/context.go | 81 | }, | COMMENT |
| LOW | internal/encoder/context.go | 101 | COMMENT | |
| LOW | internal/encoder/context.go | 181 | // Outer is the context of the encoding which a call of MarshalEncode by a method is nested in, for the call | COMMENT |
| LOW | internal/encoder/context.go | 201 | V2State unsafe.Pointer | COMMENT |
| LOW | internal/encoder/int.go | 1 | // This files's processing codes are inspired by https://github.com/segmentio/encoding. | COMMENT |
| LOW | internal/encoder/map_key_interface.go | 21 | // ( GOEXPERIMENT=jsonv2, the default since Go 1.27; this file uses the API of Go 1.27 ): the name of a key is | COMMENT |
| LOW | internal/encoder/map_collect.go | 21 | // map being what its type says. A map of another key, or of a value of another size, is read by | COMMENT |
| LOW | internal/decoder/option.go | 21 | type V2Flags uint32 | COMMENT |
| LOW | internal/decoder/stream_elements.go | 21 | // past the token being read, which fails a value at the read of its first invalid byte, and the buffer holds a read | COMMENT |
| LOW | internal/decoder/funcs_v2.go | 81 | // Stream is the stream which the call decodes, or nil for an input of its own, with the state of its decoding | COMMENT |
| LOW | internal/decoder/funcs_v2.go | 101 | Place StreamPlace | COMMENT |
| LOW | internal/decoder/stream.go | 21 | // a whole block from any byte of the value. | COMMENT |
| LOW | internal/decoder/stream.go | 41 | r io.Reader | COMMENT |
| LOW | internal/decoder/stream.go | 61 | readStart int64 | COMMENT |
| 66 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | internal/cmd/benchcheck/main.go | 13 | // To make the comparison robust against the load of the machine changing over time, | COMMENT |