MySQL中如何访问含分号的JSON属性?
如何访问JSON中含分号的属性?
嘿,这个问题我太熟悉了!JSON Path里的分号是个特殊角色——它通常被用来分隔多个表达式,所以你直接写$.foo;oo的话,解析器会在分号那里就误以为表达式结束了,剩下的oo就成了无效语法,自然报错。
解决办法很简单,只需要把包含特殊字符的属性名用引号包裹起来,明确告诉解析器这是一个完整的属性名就行。下面给你几种靠谱的写法:
常见正确写法
假设你的JSON结构是这样的:
{ "foo;oo": "我是目标值" }
1. 点语法+引号包裹
用单引号或者双引号把属性名包起来:
- 单引号写法:
$.'foo;oo' - 双引号写法:
$."foo;oo"注意:如果是在代码字符串里使用双引号,可能需要根据语言规则转义,比如Java里要写成
"$.(\"foo;oo\")",避免转义麻烦的话,用单引号会更省心。
2. 方括号语法(兼容性最强)
这种写法几乎适配所有JSON Path解析器,把属性名放在方括号里并用引号包裹:
$["foo;oo"]
或者用单引号:
$['foo;oo']
代码示例(以Jayway JsonPath为例)
import com.jayway.jsonpath.JsonPath; public class JsonPathTest { public static void main(String[] args) { String json = "{\"foo;oo\": \"bar\"}"; // 三种写法都能拿到正确值 String value1 = JsonPath.read(json, "$['foo;oo']"); String value2 = JsonPath.read(json, "$.\"foo;oo\""); String value3 = JsonPath.read(json, "$[\"foo;oo\"]"); System.out.println(value1); // 输出 bar } }
本质上就是通过引号把特殊字符“隔离”起来,不让解析器把分号当成语法分隔符处理,这样就能正确定位到目标属性啦。
内容的提问来源于stack exchange,提问作者tixastronauta
相关产品推荐
相关产品推荐

