Ответ 1
"Есть ли разумный способ заставить Chrome вести себя так, как ожидалось?"
Не уверен, что вы называете это здравомыслящим, но вы можете сделать некоторые манипуляции в функции reviver, чтобы исправить ее.
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']);
Конечно, вам, вероятно, придется немного подстроить его для своего кода, чтобы вы не исправляли вещи, которые не нужно исправлять.
Вероятно, вы также захотите протестировать браузер до его запуска, чтобы узнать, требуется ли исправление.
var needsJSONfix = !JSON.parse('{"01":1}')["01"];
months = JSON.parse(response, needsJSONfix ? fixFunc : null);