在我的nodejs应用程序中,我有一个json对象,其中包含string,num和boolean类型的组合。但是boolean和num类型也表示为字符串。
Eg: `{"name":"sam","age":"24","isMarried":"false"}`
这里的age和isMarried是num和boolean类型,但表示为字符串类型。所以有任何方法,识别上面的json键值类型并将其转换为相应的变量type.i.e to
{"name":"sam","age":24,"isMarried":false}
。`
任何帮助表示赞赏。谢谢!
答案 0 :(得分:1)
您需要确保您的实际服务器返回正确的类型,因为JSON理解布尔值和整数。
你需要创建js函数来处理它。这在JS中并不容易,因为它没有tryParse。
以下是一个示例:https://jsfiddle.net/cr4qe1an/
var str = '{"name":"sam","age":"24","isMarried":"false"}';
var obj = JSON.parse(str);
Object.keys(obj).forEach((x) => {
if (obj[x] === 'false' || obj[x] === 'true') {
obj[x] = obj[x] === 'true';
}
if (!isNaN(parseInt(obj[x], 10))) {
obj[x] = parseInt(obj[x], 10); // This is bad, '1abc' will be 1
}
});
答案 1 :(得分:0)
我建议使用mapper来获取需要回调的键来转换项目。
var data = { "accounting": [{ "firstName": "John", "lastName": "Doe", "age": "23", married: "true" }], "sales": [{ "firstName": "Sally", "lastName": "Green", "age": "27", married: "false" }] },
map = [
{ key: 'age', cb: Number },
{ key: 'married', cb: function (v) { return v === 'true'; } }
];
Object.keys(data).forEach(function (k) {
data[k].forEach(function (a) {
map.forEach(function (b) {
if (b.key in a) {
a[b.key] = b.cb(a[b.key]);
}
});
});
});
console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }