【发布时间】:2021-06-23 15:00:38
【问题描述】:
我有一个 json 字符串,它有 Unicode 键:
{"Текст":"Text"}
我可以成功地JSON.parse 它然后JSON.stringify - 它会是一样的。
我无法访问Текст 密钥;它是未定义的:
JSON.parse('{"Текст":"Text"}')["Текст"] // undefined
我无法通过Object.keys() 获取密钥,它返回 0。
我尝试在解析之前在字符串中转义Unicode,甚至在尝试访问键时在括号中转义Unicode,但没有帮助。
页面有
<meta charset="utf-8">
Json 字符串由 php 的 echo 返回。 php代码有开头
header('Content-Type: text/html; charset=utf-8');
字符串本身可以正确显示。
更新
我将所有脚本的内容类型更改为纯文本(不幸的是,不能使用 pc 和 devtools),以查看 json 字符串如何echo。它被转义了:
...,"\u041d\u0430\u0447\u0430\u043b\u043e":"some value",...
更新 2
我将转义的 unicode 更改为仅 unicode,但仍然面临问题
更新 3
我认为这确实是一个错误。正如我上面写的,从 unicode 字符串解析的 json 对象是绝对有效的。我无法访问它的密钥,但如果我 stringify 它,它将返回一个有效的字符串。
我想:“如果解析然后设置密钥,那应该在那里?”。我做到了——没有任何改变。还有更多——添加任何键都不会影响 json 对象。当我对它进行字符串化时,它返回一个原始字符串,没有任何更改。
【问题讨论】:
-
无法复制,
JSON.parse('{"Текст":"Text"}')["Текст"]为我工作。 -
@ASDFGerte,确实,我也是。那么可能是什么问题????
-
你只能将这个逻辑推到它破坏代码的地步,但它可以工作,只是因为键是一个字符串标识符。
-
让 e = JSON.parse('{"Текст":"Text"}'); console.log(e["Текст"]);有效吗?
-
我建议调试代码,并检查它的每一部分(看看字符串是什么,看看对
JSON.parse的调用是什么,等等)。有点奇怪,JSON.parse给出了一个空对象,如果字符串被破坏,我会预料到一个异常。
标签: javascript json unicode key