我有以下json
{
"Title": "Test",
"StartDate": {
"Month": "3",
"Year": "1973"
},
"EndDate": {
"Month": "4",
"Year": "1974"
}
}
我希望来自Month
和Year
的{{1}}和StartDate
值不带引号,如下所示:
EndDate
修改 我没有使用JSON.stringify()创建json。我的JSON是由Angular 2中的Form Builder模块创建的,尽管事实上我将它的类型设置为数字,在我更改值之后,该值得到引号。
答案 0 :(得分:2)
在保存JSON之前,请使用parseInt()函数将值转换为整数。这将删除引号。
JSON.stringify({
Month: parseInt( value , 10);
})
请参阅this answer
答案 1 :(得分:1)
如果您之前在JavaScript代码中创建了JSON对象,请转到@Adrian Lambertz的答案。如果您从其他地方获得JSON作为String并想要转换它,请阅读我的答案:
假设您在JavaScript代码中将此JSON作为字符串,您可以将所需的值转换为这样的整数:
var events = JSON.parse(JSONStringYouWantToConvert);
// if the JSON String is an array of events that all have a Title, a StartDate and an EndDate
for (var i = 0; i < events.length; i++) {
// else, forget about the loop and the [i] index, the concept remains the same
events[i].StartDate.Month = parseInt(events[i].StartDate.Month);
events[i].StartDate.Year = parseInt(events[i].StartDate.Year);
events[i].EndDate.Month = parseInt(events[i].EndDate.Month);
events[i].EndDate.Year = parseInt(events[i].EndDate.Year);
}
// make a JSON String that wont have the quotes around the Month and Year numbers
var JSONStringConverted = JSON.stringify(events);
答案 2 :(得分:0)
只需将字符串转换为数字即可。 这段代码只是一个例子,您可以根据对象结构进行调整。
function normalize(target) {
for (const date of ['StartDate', 'EndDate']) {
for (const item of ['Month', 'Year']) {
target[date][item] = Number(target[date][item]);
}
}
}
答案 3 :(得分:0)
我无法看到结果的数据排序顺序,所以这里有两个版本。
这适用于JSON.stringify
以及用于为某些键创建数字的替换函数,例如Month
和Year
。
var dataObj = { "Title": "Test", "StartDate": { "Month": "3", "Year": "1973" }, "EndDate": { "Month": "4", "Year": "1974" } },
jsonStr = JSON.stringify(dataObj, function (k, v) {
return ['Month', 'Year'].indexOf(k) !== -1 ? +v : v;
}),
parsed = JSON.parse(jsonStr);
console.log(jsonStr);
console.log(parsed);
&#13;
这适用于JSON.parse
还有一个reviver函数,用于为某些键创建数字,例如Month
和Year
。
var jsonStr = '{ "Title": "Test", "StartDate": { "Month": "3", "Year": "1973" }, "EndDate": { "Month": "4", "Year": "1974" } }',
parsed = JSON.parse(jsonStr, function (k, v) {
return ['Month', 'Year'].indexOf(k) !== -1 ? +v : v;
});
console.log(parsed);
&#13;