JSON使用默认字符串替换所有空值

3

JSON有许多空值,我想用默认字符串替换这些空值。

var json= [
{
    "machineNum": "1A",
    "serialNo": "123",
    "city": ""
},
{
    "machineNum": "2B",
    "serialNo": "",
    "city": ""
},
{
    "machineNum": "3A",
    "serialNo": "123",
    "city": "NewCity"
}
]

 var newJson=json.replace("","Not AVailable");
 console.log(newJson);

无论何处出现""-空值,都替换为默认值"Not Available"。

以上方法不起作用。

JSFIDDLE在这里


如果您在JSON字符串上使用它而不是解析后的JSON对象,则可以起作用。 - doldt
3个回答

8
你需要在json字符串上进行替换,而不是javascript对象。此外,你要查找的不是"",而是"\"\""
var json= [
{
    "machineNum": "1A",
    "serialNo": "123",
    "city": ""
},
{
    "machineNum": "2B",
    "serialNo": "",
    "city": ""
},
{
    "machineNum": "3A",
    "serialNo": "123",
    "city": "NewCity"
}
]
var temp = JSON.stringify(json);
temp = temp.replace(/\"\"/g, "\"Not Available\"");
json = JSON.parse(temp);
console.log(json);

控制台输出:

输入图像描述


它将替换第一个出现的“”(空)而不是“不可用”的其他内容仍为“”(空)。 - chirag
1
你可以使用全局修饰符来匹配正则表达式。替换此行代码:>> temp = temp.replace(/""/g, ""Not Available""); - jpbaxxter
好的回答,+1。 - blueprintchris

3

如果你不想将JSON转换成字符串再解析,你可以循环遍历数组和数组中对象的每个属性。

json.forEach(function (machine) {
    Object.keys(machine).forEach(function (key) {
        if (machine[key] === '' && machine.hasOwnProperty(key)) machine[key] = 'Not Available';
    });
});

1
你可以使用 Array.prototype.map 以及 Object.keys 来确保所有的键值对都应用默认字符串,包括空值。以下是一个快速示例:
function replaceEmpty(json, defaultStr){
    return json.map(function (el){
        Object.keys(el).forEach(function(key){
            el[key] = el[key] || defaultStr;
        });
        return el;
    });
}

var result = replaceEmpty(json,"Not Available");

输出

[{"machineNum":"1A","serialNo":"123","city":"不可用"},{"machineNum":"2B","serialNo":"不可用","city":"不可用"},{"machineNum":"3A","serialNo":"123","city":"新城市"}]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接