我获得了一个具有重复键的JSON文件,第二个是空值,如下所示:
var jsonString = '{"dup": 1, "dup": null}';
执行JSON.parse(jsonString)
时," dup"变成" null"。
我需要的是保持" dup"等于" 1"如果第二个" dup"一片空白。所以我想知道是否有任何功能:
var noNullJson = jsonString.removeNull();
JSON.parse(noNullJson); //{"dup": 1}
或者,如果Javascript中有任何函数在调用JSON.parse
时不允许覆盖密钥。
感谢您阅读此问题。任何帮助深表感谢。
答案 0 :(得分:2)
我编写了一个函数,它将删除null并解析json。 我用这种方法尝试了大多数排列。
你可以运行代码,在这里我已经给出了4个不同模型的测试用例。
希望,这会有所帮助。 [P.S。此逻辑仅适用于Flat JSONs
(没有嵌套对象的JSON)]
function removeNullAndParseJson(jsonString) {
var commaSplitedArr = jsonString.split(','),
finalSplittedArr = [];
commaSplitedArr.forEach(function(d, index){
if(d.indexOf('null') !== -1){
if(index === 0){
finalSplittedArr.push(d.replace(/[^{}\[\].]/g, ""));
}else {
finalSplittedArr[finalSplittedArr.length-1] += d.replace(/[^{}\[\].]/g, "");
}
}else {
finalSplittedArr.push(d);
}
});
return JSON.parse(finalSplittedArr.map(function(d){return d.replace("{}", "");}).join(','));
}
//----Testing-----
var jsonString;
//test case1
jsonString = '{"dup": 1, "dup": null}';
console.log('test1 -- ', removeNullAndParseJson(jsonString));
//test case2
jsonString = '[{"dup": 1, "dup": null}, {"dup": 2, "dup": null}]';
console.log('test2 -- ', removeNullAndParseJson(jsonString));
//test case3
jsonString = '[{"dup": 1, "dup": null}, {"dup": 2, "dup": null}, {"dup": null, "dup": null}]';
console.log('test3 -- ', removeNullAndParseJson(jsonString));
//test case4
jsonString = '[{"dup": 1, "dup": null}, {"dup": null, "dup": null}, {"dup": 2, "dup": null}]';
console.log('test4 -- ', removeNullAndParseJson(jsonString));

答案 1 :(得分:0)
您可以尝试在解析之前重命名它;
var jsonString = '{"dup": 1, "dup": null}',
jObj = JSON.parse(jsonString.replace(/(dup).+(\1)/,"$&" + "2"));
console.log(jObj);