she*_*ker 11 javascript json google-chrome
祝大家好日子,
我遇到了一个令人沮丧的问题,似乎只发生在Chrome中.
var response = '{"01":"January","02":"February"}',
months = JSON.parse(response);
console.log(months['02']) // undefined in Chrome (my version is 24.0.1312.5 beta)
console.log(months[2]) // "February"
Run Code Online (Sandbox Code Playgroud)
Firefox和Safari似乎正如预期的那样处理这个问题,而Chrome正在为整数投射字符串式JSON密钥.
jQuery的parseJSON方法具有相同的行为(我假设它依赖于浏览器的JSON.parse方法).
我非常关注这种特定的API响应格式,所以我宁愿不改变服务器的响应.是否有一种理智的方式迫使Chrome按预期行事?
“有没有一种明智的方法可以强制 Chrome 按预期运行?”
不确定你是否认为这是明智的,但你可以在恢复函数中进行一些操作来修补它。
var response = '{"01":"January","02":"February"}',
months = JSON.parse(response,
function(k,v) {
if (this.constructor === Object && // is Object
!isNaN(k) && // key is a Number
+k > 0 && // from 1
+k < 1 && // to 9
k.charAt(0) !== '0') { // missing the '0'
this['0' + k] = v; // manually assign the key
return; // return undefined to prevent assignment
}
return v; // allow the assignment
});
console.log(months['02']);
Run Code Online (Sandbox Code Playgroud)
当然,您可能需要对代码进行一些调整,这样您就不会修复不需要修复的内容。
您可能还想在浏览器运行之前对其进行测试,以查看是否需要修复。
var needsJSONfix = !JSON.parse('{"01":1}')["01"];
Run Code Online (Sandbox Code Playgroud)
months = JSON.parse(response, needsJSONfix ? fixFunc : null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |