如何将 JSON 对象的所有空白值转换为连字符



这是我的示例响应:

var jsonData1 = [{
  firstName: "Sam",
  age: "10"
}, {
  firstName: "John",
  age: "11"
}, {
  firstName: "Jack",
  age: "12"
}, {
  firstName: "Pam",
  age: "13"
}, {
  firstName: "",
  age: "14"
}, {
  firstName: "Mitch",
  age: ""
}];

想要的只是,只要我在任何字段中有空白字符串,就将其显示为零。我想使用普通的JS,没有lodash,没有jQuery来做到这一点。

假设给定的数据结构,我会这样处理它:

  • 使用 Array.forEach() 遍历数组中的元素
  • 使用 Object.keys(person).forEach() 遍历元素中的属性
  • 检查空字符串并替换

喜欢这个:

jsonData1.forEach(person => {
     Object.keys(person).forEach(key => {
         if (person[key] === "") person[key] = "-";
     });
});

您可以在一行代码中编写以下内容:

jsonData1.forEach(o => Object.keys(o).forEach(key => o[key] === '' && (o[key] = '-')))

使用forEach循环

var jsonData1 = [
 {
firstName: "Sam",
age: "10"
  },
 {
firstName: "John",
age: "11"
  },
 {
firstName: "Jack",
age: "12"
  },
  {
firstName: "Pam",
age: "13"
  },
  {
firstName: "",
age: "14"
 },
 {
firstName: "Mitch",
age: ""
}
 ];
 jsonData1.forEach((e)=>{Object.keys(e).forEach((x)=>e[x]==""?e[x]=0:false)})
 console.log(jsonData1)

这应该可以解决嵌套对象的问题:

const convertObj = obj => {
    Object.keys(obj).forEach(key => {
        if (obj[key] === '') {
            obj[key] = 0
        } else if (obj[key] instanceof Object) {
            convertObj(obj[key])
        }
    })
    return obj
}

样品测试:

const jsonData1 = [
   {
        firstName: "Mitch",
        age: "",
        nested_test: [
            {
                foo: 'bar',
                age: ''
            }
        ],
        nested_object: {
            foo: 'bar',
            age: ''
        }
    }
]

结果:

[
  {
    "firstName": "Mitch",
    "age": 0,
    "nested_array": [
      {
        "foo": "bar",
        "age": 0
      }
    ],
    "nested_object": {
      "foo": "bar",
      "age": 0
    }
  }
]

由于您有一个数组,因此您可以简单地迭代它:

for (var i=0;i<jsonData1.length;i++) {
    if (jsonData1[i].age==="")
        jsonData1[i].age = 0;
    if (jsonData1[i].firstName==="")
        jsonData1[i].firstName = "Unknown";
}

您可以使用for...of

for...of 语句创建一个循环,遍历可迭代对象,包括:内置字符串、数组、类数组对象(例如,参数或 NodeList)、TypedArray、Map、Set 和用户定义的可迭代对象。

var jsonData1 = [{
  firstName: "Sam",
  age: "10"}, {
  firstName: "John",
  age: "11"},{
  firstName: "Jack",
  age: "12"},{
  firstName: "Pam",
  age: "13"},{
  firstName: "",
  age: "14"},{
  firstName: "Mitch",
  age: ""
}];
for(var p of jsonData1){
  if(p.firstName.trim()=="") p.firstName="0";
  if(p.age.trim()=="") p.age="0"
}
console.log(jsonData1);

试试这个

 let newData = jsonData1.forEach(function(data) {
     for(ans in data) {
        If(data[ans] === "") data[ans] = 0;
     }
  });
jsonData1 = jsonData1.map(item=>{
    for(let key in item){
        if(item[key].length === 0) item[key] = 0;
    }
    return item;
})

具有简单循环

for(let i = 0; i<data.length;i++){
    let keys = Object.keys(data[i]); //returns an array of keys of object
    for(let key = 0;key<keys.length;key++){ 
        let keyName = keys[key];
        if(data[i][keyName].length === 0) data[i][keyName] = 0
    }
}

最新更新