{"record":{"id":"fccdb88c06717bdb","repo":"tomnomnom/gron","slug":"invalid-value-s","errorCode":null,"errorMessage":"invalid value `%s`","messagePattern":"invalid value `(.+?)`","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ungron.go","lineNumber":393,"sourceCode":"\t}\n\n\tt := ts[0]\n\tswitch {\n\tcase t.isPunct():\n\t\t// Skip the token\n\t\tval, err := ungronTokens(ts[1:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn val, nil\n\n\tcase t.isValue():\n\t\tvar val interface{}\n\t\td := json.NewDecoder(strings.NewReader(t.text))\n\t\td.UseNumber()\n\t\terr := d.Decode(&val)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid value `%s`\", t.text)\n\t\t}\n\t\treturn val, nil\n\n\tcase t.typ == typBare:\n\t\tval, err := ungronTokens(ts[1:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout := make(map[string]interface{})\n\t\tout[t.text] = val\n\t\treturn out, nil\n\n\tcase t.typ == typQuotedKey:\n\t\tval, err := ungronTokens(ts[1:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tkey := \"\"","sourceCodeStart":375,"sourceCodeEnd":411,"githubUrl":"https://github.com/tomnomnom/gron/blob/88a6234ea2d0c487090988182ad9a7cdf6def924/ungron.go#L375-L411","documentation":"In ungronTokens, value tokens are decoded with encoding/json (with UseNumber). If json.Decode fails on the token's text, the token is not a valid JSON value and ungronTokens returns \"invalid value `%s`\" containing the offending text.","triggerScenarios":"`gron --ungron` on statements whose value tokens are not valid JSON — e.g. bare numbers like `json.a = 007;`, malformed numbers (`1.2.3`), unquoted bare words in value position, or text corrupted by shell/quoting.","commonSituations":"Hand-written gron statements where strings were not quoted; output mangled by sed removing quotes; gron statements produced by other tools with non-JSON literals (NaN, Infinity, single-quoted strings).","solutions":["Quote string values with double quotes: json.a = \"hello\";","Fix malformed numbers (no leading zeros beyond 0, no double dots, no NaN/Infinity)","Regenerate input via `gron` rather than writing statements by hand","Pre-validate each RHS value with json.Valid([]byte(value)) before ungron"],"exampleFix":"// before\njson.a = 'hello';\n\n// after\njson.a = \"hello\";","handlingStrategy":"validation","validationCode":"value := `\"hello\"` // RHS text from the statement\nif !json.Valid([]byte(value)) {\n\t// invalid JSON value; fix quoting/number before ungron\n}","typeGuard":"func isJSONValue(text string) bool {\n\treturn json.Valid([]byte(text))\n}","tryCatchPattern":"v, err := ungronTokens(ts)\nif err != nil {\n\tif strings.HasPrefix(err.Error(), \"invalid value `\") {\n\t\t// quote strings / fix numeric literals, then retry\n\t}\n\treturn err\n}","preventionTips":["Double-quote all string values in hand-written statements","Avoid NaN/Infinity and leading-zero numbers","Prefer generating statements with gron over hand-writing them"],"tags":["go","gron","json","tokens"],"backgroundTag":"json-decode-failed","analyzedSha":"88a6234ea2d0c487090988182ad9a7cdf6def924","analyzedAt":"2026-09-06T11:35:31.658Z","contentChangedAt":"2026-09-06T11:35:31.658Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}