Ответ 1
Вы можете использовать JSON-заменитель для переключения ключей перед записью.
JSON.stringify(myVal, function (key, value) {
if (value && typeof value === 'object') {
var replacement = {};
for (var k in value) {
if (Object.hasOwnProperty.call(value, k)) {
replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k];
}
}
return replacement;
}
return value;
});
Иными словами, вы можете использовать JSON reviver.
JSON.parse(text, function (key, value) {
if (value && typeof value === 'object')
for (var k in value) {
if (/^[A-Z]/.test(k) && Object.hasOwnProperty.call(value, k)) {
value[k.charAt(0).toLowerCase() + k.substring(1)] = value[k];
delete value[k];
}
}
return value;
});
Второй необязательный аргумент - это функция, которая вызывается с каждым значением, созданным как часть синтаксического анализа, или каждое значение, которое должно быть записано. Эти реализации просто перебирают по клавишам и нижним регистрам первую букву любого, у кого есть буква верхнего регистра.
Существует документация для заменителей и регенераторов в http://json.org/js.html:
Необязательный параметр reviver - это функция, которая будет вызываться для каждого ключа и значения на каждом уровне конечного результата. Каждое значение будет заменено результатом функции reviver. Это можно использовать для преобразования общих объектов в экземпляры псевдоклассов или для преобразования строк даты в объекты Date.
Метод строкообразования может выполнять необязательную функцию-заменитель. Он будет вызываться после метода toJSON (если он есть) для каждого из значений в структуре. Он будет передан каждый ключ и значение в качестве параметров, и это будет связано с объектом, удерживающим ключ. Возвращаемое значение будет сжато.