Javascript:JSON解析而不覆盖现有密钥

时间:2016-06-12 12:23:49

标签: javascript json

我获得了一个具有重复键的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时不允许覆盖密钥。

感谢您阅读此问题。任何帮助深表感谢。

2 个答案:

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