在JSON响应中将字符串true / false转换为boolean

时间:2018-07-15 05:40:16

标签: javascript

我有一个场景,其中JSON响应中的许多字段以字符串("true"/"false")的形式出现。

现在我需要通过string一次将Boolean的所有值替换为Javascript

示例:

{
    field1: "true",
    field2: "false"
}

预期:

{
    field1: true,
    field2: false
}

这是一个示例。我的JSON响应非常庞大,包含许多对象和数组。

4 个答案:

答案 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;
}