属性が2回以上ある非常にフラットなJSONがあります。私が「古い」価値観を追い出すためにいくつかの論理を構築した後、私はそれをもちろん試してみたかったのです。それから、私は本当に奇妙なことを発見しました。私のロジックは、重複がないことを意味する属性を常に1回カウントしました。だから私は先に進んでこのダミーのJSONを作成しました:JSONの重複はconsole.log()には表示されません
{
"John": {
"id": 10001,
"name": "John Doe",
"iconId": 10,
"level": 12,
"revisionDate": 1000000000001
},
"John": {
"id": 10001,
"name": "John Doe",
"iconId": 10,
"level": 12,
"revisionDate": 1000000000005
},
"Amy": {
"id": 10002,
"name": "Amy Smith",
"iconId": 15,
"level": 11,
"revisionDate": 1000000000001
}
}
ここでは重複がわかります。唯一の違いは彼のリビジョン日付です。奇妙なことが起こる。この時点で
// loading JSON
let oldResults = require('./dummy.json');
// log JSON
console.log(oldResults);
:
今私はNodeJSでJSONをロードし、このようにそれをログに記録します。私のコンソールには、私のJSONとエイミーに私の第二のジョンを示し、決して最初のジョンます:
λ node debug.js
{ John:
{ id: 10001,
name: 'John Doe',
iconId: 10,
level: 12,
revisionDate: 1000000000005 },
Amy:
{ id: 10002,
name: 'Amy Smith',
iconId: 15,
level: 11,
revisionDate: 1000000000001 } }
私はJohn123に2つ目のジョンを変更した場合は最初のものは他のものとして記録されます(しません私は第一又は第二を変更した場合、結果は同じになります物質):
λ node debug.js
{ John:
{ id: 10001,
name: 'John Doe',
iconId: 10,
level: 12,
revisionDate: 1000000000001 },
John123:
{ id: 10001,
name: 'John Doe',
iconId: 10,
level: 12,
revisionDate: 1000000000005 },
Amy:
{ id: 10002,
name: 'Amy Smith',
iconId: 15,
level: 11,
revisionDate: 1000000000001 } }
私は、通常のWindows CMDとCMDERでこれを試してみました。両方とも同じ結果を示しています。また、私はノードのキャッシュをクリアし、まだ成功しません...私はJSONを変更する可能性のある他のロジックなしで、このJSONを私のdebug.jsにロードします。
NodeJSが2番目のJohnを追い出している理由を教えてもらえますか?
よろしく、Megajin
ジョンがそこに2人いるとき、どのように「ジョン」を参照したいと思っていたのですか?あなたが 'my_object.John'を実行すると、どちらが表示されますか? –
https://www.google.com/search?q=site%3Astackoverflow.com+javascript+json+duplicate+keys –
特にロギングについて不思議だったら、NodeJSが自動的に解析するように見える点を除いて同じ回答ですかなり有害であるJSON。 ...ああ、それは 'のためだ。require() 'は' .json'拡張にかかわらずJSプログラムとして見えます。 –