技术问询:JSON属性名能否使用任意字符串及UTF-8字符串?
关于JSON属性名的合规性及Vue.js中的使用说明
嘿,我来帮你把这个问题讲明白~
1. JSON规范对属性名的要求
根据JSON官方标准,属性名必须是双引号包裹的UTF-8字符串,而且几乎没有额外限制:
- 支持任意有效的UTF-8字符:包括空格、变音符号(比如你例子里的
ö)、非英文字符,甚至emoji都没问题; - 唯一需要注意的是:如果属性名包含双引号、反斜杠这类特殊字符,需要按照JSON规则转义(比如把
"写成\")。
2. 你的示例代码合规性分析
你写的这段代码是JavaScript对象字面量,不是严格的JSON格式:
var personData = { 'Matti Möttönen': { "FirstName": "Matti", "LastName": "Möttönen", }, ... }
- 作为JS代码:完全合法!JS允许用单引号包裹属性名,带空格、特殊字符的属性名也能正常使用。不过末尾那个多余的逗号(
"LastName": "Möttönen",后面的逗号)建议去掉,虽然现代环境支持,但旧版JS可能会报错。 - 如果是要存成扁平JSON文件:需要改成严格JSON格式——把属性名的单引号换成双引号,去掉多余逗号,比如:
这样的JSON文件是完全合规的,Vue读取不会有问题。{ "Matti Möttönen": { "FirstName": "Matti", "LastName": "Möttönen" }, "其他用户": { "FirstName": "xxx", "LastName": "yyy" } }
3. Vue.js中的使用注意事项
在Vue里使用这类特殊属性名时,要注意访问方式:
- 不能用点语法(比如
personData.Matti Möttönen会直接报错),必须用方括号语法:personData['Matti Möttönen']; - 在模板里同样要用方括号:
{{ personData['Matti Möttönen'].FirstName }}; - 如果觉得这种访问方式麻烦,可以提前把扁平数据处理成数组格式(比如每个元素是包含
fullName、firstName、lastName的对象),这样在模板里遍历会更方便。
内容的提问来源于stack exchange,提问作者coder




