反序列化含斜杠的JSON值时为何额外添加方括号?
关于Newtonsoft.Json中JToken.Path格式的说明
这是有意设计的行为,并非Bug。
Newtonsoft.Json的JToken.Path属性生成的路径遵循JSONPath规范的约定:当键名包含特殊字符(如斜杠/、点.、空格等)时,会自动采用['键名']的格式包裹键名,核心目的是避免路径解析时产生歧义。
具体原因:
- 对于无特殊字符的键名(如
name),直接使用name格式即可清晰表示键名,不会和JSONPath的层级分隔逻辑冲突。 - 对于包含斜杠的键名(如
na/me),如果直接输出na/me,会被JSONPath解析器误认为是层级路径(类似父节点/子节点的结构),导致无法正确定位到目标键。而['na/me']的格式能明确告知解析器:这是一个完整的键名,而非层级分隔的路径。
验证示例:
如果尝试用na/me作为路径访问目标值会失败,而['na/me']能正确定位:
var value = object2JToken.SelectToken("['na/me']"); // 正确获取到"Premium" // var value = object2JToken.SelectToken("na/me"); // 抛出找不到节点的异常
这种设计保证了路径的唯一性和可解析性,完全符合JSONPath的标准行为。
内容的提问来源于stack exchange,提问作者Frank Ocean
相关产品推荐
相关产品推荐

