2016-06-12 3 views
-1

を上書きせずにJSONのパース:Javascriptを:私は以下のように、第2の1がNULL値であるとの重複キーがあるJSONファイル与えられた既存のキー

var jsonString = '{"dup": 1, "dup": null}';

JSON.parse(jsonString)をやって、「DUP」」となりヌル"。

私が必要とするのは、2番目の "dup"がnullの場合、 "dup"を "1"に保つことです。

var noNullJson = jsonString.removeNull(); JSON.parse(noNullJson); //{"dup": 1}

またはJSON.parseを呼び出すときに、キーを上書きことはできませんJavaScriptで任意の関数がある場合:どのような機能があるのであれば、私は思っていました。

この質問を読んでいただきありがとうございます。どんな助けも大歓迎です。

+1

重複キーなし、整形式のJSONをしようとしないのはなぜ? – n00dl3

+2

JSONはどこから来たのですか?あなたはその建設に影響を与えることができますか? –

+0

重複キーを持つJSONは有効ですが、回避することをお勧めします。 –

答えて

2

私はnullを取り除き、jsonを解析する関数を書いています。 私はこのアプローチで試みた順列のほとんどを試しました。

あなたはコードを実行することができます、ここで私は4つの異なるモデルのテストケースを与えました。

希望、これは役に立ちます。

[P.S.このロジックはあなたが好き解析する前に名前を変更してみてください

function removeNullAndParseJson(jsonString) { 
 
    var commaSplitedArr = jsonString.split(','), 
 
    \t finalSplittedArr = []; 
 
    commaSplitedArr.forEach(function(d, index){ 
 
    \t if(d.indexOf('null') !== -1){ 
 
    \t \t if(index === 0){ 
 
    \t \t \t finalSplittedArr.push(d.replace(/[^{}\[\].]/g, "")); 
 
    \t \t }else { 
 
    \t \t \t finalSplittedArr[finalSplittedArr.length-1] += d.replace(/[^{}\[\].]/g, ""); 
 
    \t \t } 
 
    \t }else { 
 
    \t \t finalSplittedArr.push(d); 
 
    \t } 
 
    }); 
 
    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

これはネストされたオブジェクトを持っているときに壊れているようです: 'jsonString = '[{" Key ":" 2522 "、" Value ":{" foo " :{"a":null、 "b":false、 "c":2}}}] ';' –

+0

はい。ネストされたオブジェクトを持つ 'JSON'では壊れています。 はソリューションにメモを追加します。ありがとう:) –

0

Flat JSONs(ネストされたオブジェクトなしJSONs)]のために動作します。

var jsonString = '{"dup": 1, "dup": null}', 
 
      jObj = JSON.parse(jsonString.replace(/(dup).+(\1)/,"$&" + "2")); 
 
console.log(jObj);

関連する問題