我有一個非常平坦的JSON,可以有一個屬性不止一次。在我建立了一些邏輯來推出「舊」價值觀之後,我想嘗試一下。然後我發現了很奇怪的東西。我的邏輯總是計算一次屬性,這意味着沒有重複。所以我繼續創建這個虛擬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
}
}
正如你可以看到這裏的重複是約翰。唯一的區別是他的修訂日期。
現在我加載了JSON中和的NodeJS日誌像這樣:
// loading JSON
let oldResults = require('./dummy.json');
// log JSON
console.log(oldResults);
此時,奇怪的事情發生了。我的控制檯會告訴我的第二約翰在我的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第一個將被記錄爲他人(不事情如果我改變了第一或第二,其結果將是相同的):
λ 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在我的debug.js沒有其他的邏輯,這可能會改變JSON。
有人能解釋我爲什麼NodeJS踢出第二個約翰?
問候,Megajin
你究竟希望在他們中有兩個人的時候提及'John'?如果你做了'my_object.John',哪一個會顯示出來。 – 2016-10-03 13:02:57
https://www.google.com/search?q=site%3Astackoverflow.com+javascript+json+duplicate+keys – 2016-10-03 13:04:29
如果您特別想知道日誌記錄,這是相同的答案,除了NodeJS似乎自動解析JSON,這非常令人討厭。哦,這是因爲'。require()',它將其視爲一個JS程序,而不考慮'.json'擴展名。 – 2016-10-03 13:10:15