{"record":{"id":"214160bf858ea30a","repo":"vitessio/vitess","slug":"invalid-json-path-expression","errorCode":null,"errorMessage":"Invalid JSON path expression.","messagePattern":"Invalid JSON path expression\\.","errorType":"error_code","errorClass":"errJSONPath","httpStatus":null,"severity":"error","filePath":"go/vt/vtgate/evalengine/eval_json.go","lineNumber":39,"sourceCode":"\t\"errors\"\n\t\"fmt\"\n\n\t\"vitess.io/vitess/go/hack\"\n\t\"vitess.io/vitess/go/mysql/collations/charset\"\n\t\"vitess.io/vitess/go/mysql/collations/colldata\"\n\t\"vitess.io/vitess/go/mysql/json\"\n\t\"vitess.io/vitess/go/sqltypes\"\n\tvtrpcpb \"vitess.io/vitess/go/vt/proto/vtrpc\"\n\t\"vitess.io/vitess/go/vt/vterrors\"\n)\n\ntype errJSONType string\n\nfunc (fn errJSONType) Error() string {\n\treturn fmt.Sprintf(\"Invalid data type for JSON data to function %s; a JSON string or JSON type is required.\", string(fn))\n}\n\nvar errJSONPath = errors.New(\"Invalid JSON path expression.\")\n\ntype evalJSON = json.Value\n\nvar (\n\t_ eval     = (*evalJSON)(nil)\n\t_ hashable = (*evalJSON)(nil)\n)\n\nfunc intoJSON(fn string, e eval) (*evalJSON, error) {\n\tswitch e := e.(type) {\n\tcase *evalJSON:\n\t\treturn e, nil\n\tcase *evalBytes:\n\t\tvar p json.Parser\n\t\treturn p.ParseBytes(e.bytes)\n\tdefault:\n\t\treturn nil, errJSONType(fn)\n\t}","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtgate/evalengine/eval_json.go#L21-L57","documentation":"errJSONPath is the sentinel error for invalid JSON path expressions in the eval engine. jsonExtractPath and intoJSONPath return it when the path argument supplied to JSON functions like JSON_EXTRACT cannot be parsed as a valid JSON path.","triggerScenarios":"Calling JSON_EXTRACT/JSON functions with a malformed or non-string path expression, e.g. unbalanced brackets, bad wildcard syntax, or a non-constant/unparseable path value.","commonSituations":"Typos in JSON path literals in queries; dynamically built paths with incorrect syntax; paths passed as wrong types.","solutions":["Fix the JSON path syntax (e.g. '$.user.name', '$[0].id') and re-run the query","Validate the path against MySQL JSON path syntax rules","Ensure the path argument is a constant string literal or a valid string expression"],"exampleFix":"// before\nSELECT JSON_EXTRACT(doc, 'user[0].name') FROM t;\n// after\nSELECT JSON_EXTRACT(doc, '$.user[0].name') FROM t;","handlingStrategy":"try-catch","validationCode":"path := \"$.user[0].name\"\nif !strings.HasPrefix(path, \"$\") {\n    return errors.New(\"JSON path must start with '$'\")\n}","typeGuard":null,"tryCatchPattern":"val, err := evalJSONExtract(doc, path)\nif err != nil && errors.Is(err, errJSONPath) {\n    // surface path syntax error to caller/query author\n}","preventionTips":["Validate JSON path literals against MySQL JSON path grammar before shipping queries","Quote and escape paths built dynamically","Add query tests that exercise each JSON function path"],"tags":["sql","json","evalengine","query-error"],"backgroundTag":"invalid-json-path","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}