我有一个JSON String
持有ID作为键,只有Strings
个数字,实际Numbers
(Float
)作为值。解析它以获取对象在Safari 10.1.2 ...
var myStr = "{\"53352\":0.6, \"82008\":0.4}";
var myStrParsed = JSON.parse(myStr);
console.log(myStrParsed);

...将导致以下解析对象:
{
"0": NaN,
"1": NaN,
"2": NaN,
"3": NaN,
"4": NaN,
"5": NaN,
"6": NaN,
"7": NaN,
...
当我真正期待以下内容时:
(在Firefox 55.0.3中执行)
Object {53352=0.6, 82008=0.4}
(在Safari 11.0中执行)
{
"53352": 0.6,
"82008": 0.4
}
我知道从Safari获得的庞大阵列是由于Safari将String
密钥误解为Number
,这会产生一个索引高达82008的数组。当然,这不是预期的。如何确保Safari正确将密钥解释为Strings
?
我可以让服务器在下划线作为前缀添加所有键,例如_53352
而不是53352
。这将解决问题,但我必须从客户端的密钥中删除下划线。整个方法感觉hacky和不一致,因为我没有将这个下划线附加到其他地方的ID。还有其他方法可以确保解释为String
吗?
在服务器端使用org.json对JSON进行编码。
答案 0 :(得分:0)
这是Safari 10.x中的已知错误
Bug 170442 - Safari 10.1 JSON.parse returns incorrect object for numeric keys with decimal values
根据@evolutionxbox,这个错误似乎已在第11版修复。