2017-08-24 6 views
-2

jsonペイロードに重複キーが含まれている場合は、400 Bad Requestエラーをスローする必要があります。私は以下のコードを使用して配列内のすべての属性を取得しています。for..inを使わずにjavascriptでjsonを繰り返すことはできますか?

var arrayObj = []; 
 
var attrArr = []; 
 
var arr = { 
 
    "serviceNumer": "1612045709", 
 
    "customerRefNumber": "TCreateS9", 
 
    "customerRefNumber": "TCreateS9" 
 
}; 
 
for (var key in arr) { 
 
    arrayObj.push(key, arr[key]); 
 
} 
 
console.log("arrayObj", arrayObj); 
 
for (var i = 0; i < arrayObj.length; i = i + 2) { 
 
    attrArr.push(arrayObj[i]); 
 
} 
 
console.log(attrArr);

私はこのfor..in使用して反復する場合、重複キーはオーバーライドされ得ます。だから、何か別の方法で私を助けてください。

+0

あなたのコードには何の問題もありません –

+1

_ "for..inを使って反復すると、重複したキーがオーバーライドされる "_ - これはfor ... inループの"不具合 "ではありません...このJSONがオブジェクトに解析されたときに既にキーを失っています - ' console.log(arr) ' 。 – CBroe

+0

JSONは重複したキーの存在を直接否定しません。しかし、 'object.key'または' object [key] 'を使ってプロパティにアクセスすると、最後の値が返されます。 – quirimmo

答えて

0

重複キーを扱うことができないあなたのJSONのimpementation、

あなたはJSONから持っているオブジェクトを取得し、戻ってJSONに変換した後、元に対して、文字列にコロンの数を比較した場合。オリジナルにキーが重複している場合は、新しいJSONのコロン数が少なくなります。

このようなチェックは、noobに警告メッセージを送信するのに適していますが、防弾ではありません。攻撃者は、文字列値のコロンにエスケープを使用してカウントを増やすことができます。 requiremntが重要な場合は、チェックを行うためにJSONパーサを変更する必要があります。

0

JavaScriptオブジェクトに重複キーを設定することはできません。すべてのキーはすべて一意でなければなりません。以下のリンクを介して、これはあなたの疑問をクリアします ゴーStackOverflow JSObjFinding and solving issues for duplicate keys

+0

RFC 7159のセクション4では、重複したキーについて言及していますが、構文的に正しくないものとして呼び出すことはありません。 – Jasen

+0

申し訳ありませんが、答えを書いている間違いを指摘してくれてありがとう! – nams

-1

あなたはそれA JSONオブジェクトが重複したキーを持つことはできません

//you can hard code it or write it 
 
var arr = { 
 
    "serviceNumer": "1612045709", 
 
    "customerRefNumber": "TCreateS9", 
 
    "customerRefNumber": "TCreateS93333" 
 
}; 
 
//but when you call it it just will show the last element 
 
console.log(arr.customerRefNumber) 
 

 
/* 
 
its like you say 
 
var ac = 1 
 
var ac = 3 
 
console.log(ac) 
 
it will show 3 
 
*/ 
 
//make it different 
 

 
var arr2 = { 
 
    "serviceNumer": "1612045709", 
 
    "customerRefNumber": "TCreateS9", 
 
    "customerRefNumber2": "TCreateS9" 
 
}; 
 
var a = Object.getOwnPropertyNames(arr).sort() 
 
var b = Object.getOwnPropertyNames(arr2).sort() 
 
console.log(a) 
 
console.log(b)

+0

あなたはそれが何を意味するかという手がかりがないので、「あなたはただ知っているだけで、それを保つ」よりも良い説明をしてください。 –

+0

同じキーを追加することはできません。つまり、オブジェクトの同じ名前を追加することはできません。 – KEKUATAN

0

ん保つ、知りません。 あなたは次の操作を行うことができるよりも文字列としてあなたのペイロードを取得している場合:

var input = '{"serviceNumer":"1612045709","customerRefNumber":"TCreateS9","customerRefNumber":"TCreateS9"}'; 
 

 
if(input === JSON.stringify(JSON.parse(input))) 
 
    console.log("input has No Duplicate"); 
 
else 
 
    console.log("input has Duplicate");

ここJSON.parseはJSONオブジェクトに入力を変換し、重複するキー

を削除しますあなたが助けてほしいと思っています:)

+0

これは、入力文字列の空白(スペース、タブ、改行)が空白から1文字'JSON.stringify()' ... –

+0

は正しいですが、比較の前に入力と解析された文字列の両方からこの空白をすべて削除することで処理できます。 – Nemani

+0

'JSON。parse() 'はJSON(文字列)を* JSONオブジェクトではなくプレーンなJavascriptオブジェクトに変換します。 「JSONオブジェクト」のようなものはありません。それは誤解です。ちょうどFYI。 –

関連する問題