我有一个场景,其中JSON响应中的许多字段以字符串("true"/"false"
)的形式出现。
现在我需要通过string
一次将Boolean
的所有值替换为Javascript
。
示例:
{
field1: "true",
field2: "false"
}
预期:
{
field1: true,
field2: false
}
这是一个示例。我的JSON响应非常庞大,包含许多对象和数组。
答案 0 :(得分:4)
JSON.parse
reviver parameter可用于排除或修改值:
var j = '{"field1":"true","field2":"false"}';
var o = JSON.parse(j, (k, v) => v === "true" ? true : v === "false" ? false : v);
console.log(o);
答案 1 :(得分:0)
这是一个不错的递归convertBools
函数:
function convertBools(obj) {
const newObj = {};
if (typeof obj !== 'object') {
return obj;
}
for (const prop in obj) {
if (!obj.hasOwnProperty(prop)) {
continue;
}
if (Array.isArray(obj[prop])) {
newObj[prop] = obj[prop].map(val => convertBools(val));
} else if (obj[prop] === "true") {
newObj[prop] = true;
} else if (obj[prop] === "false") {
newObj[prop] = false;
} else {
newObj[prop] = convertBools(obj[prop]);
}
}
return newObj;
}
// Some examples below:
const obj1 = {
field1: "true",
field2: "false"
};
const obj2 = {
field1: "true",
field2: "asdf",
field3: "false",
field4: {
field4a: "true",
field4b: "asdf",
field4c: ["a", {"array1": "true"}, "c"],
}
}
const ret1 = convertBools(obj1);
console.log(ret1);
const ret2 = convertBools(obj2);
console.log(ret2);
答案 2 :(得分:0)
您也可以尝试类似的方法。
let obj = {
field1: "true",
field2: "false",
field3: "SomeOtherValueThanBoolean"
};
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
obj[prop] = (obj[prop] == 'true' || obj[prop] == 'false')? obj[prop] === 'true': obj[prop] ;
}
}
console.log(obj);
答案 3 :(得分:0)
我的版本,不修改源对象,返回带有已解析布尔值的新对象:
const object = {
"test": "true",
"test1": false,
"test2": "false",
"test3": 5,
}
console.log(parseBooleansInObj(object));
function parseBooleansInObj(object) {
const newObject = { ...object };
Object.keys(newObject)
.forEach((objKey) => {
let value = newObject[objKey];
value = (value === 'true' ? true : value === 'false' ? false : value);
newObject[objKey] = value;
});
return newObject;
}