我知道,對象的屬性不保證以任何特定順序存儲或讀取。在不改變順序的情況下瀏覽已存在的對象
我的問題是,它不取決於我使用的對象或數組。我已經有這樣一個大而且非常嵌套的JSON文件:
{ "occasion": 23, "mayorstips": { "1": 0, "3": 0, "2": 0...
我只需要做一些修改。這就是我如何開始使用它:
var campaign = JSON.parse(fs.readFileSync(theJSONFile));
for(var plot in plots) {
if(plots.hasOwnProperty(plot)) {
switch(plots[plot].province) {
case 'forest':
...
當我做,我只是把它帶回:
fs.writeFileSync(theJSONFile, JSON.stringify(campaign));
現在,我注意到兩個問題的方法:
- 原始間隔格式丟失。該原始文件只是一個長行,需要一個長行,所以
JSON
庫的任何格式化嘗試都沒有幫助。我用幾個正則表達式替換解決了它。 - 現在「JSON行」文件已排序。所以我從
{ "1": 0, "3": 0, "2": 0
到{ "1": 0, "2": 0, "3": 0
,結果是一個大問題。 - 以0結尾的浮點數被截斷。此文件需要浮點數始終有六位小數,例如,34.293800。但是當我打開它時,數字更改爲34.2938!
這是一個35000字符的行。這是如何解決問題#2和#3?我可以做另一個正則表達式替換#3,但也許有一些我錯過了。
您正在閱讀的json文件是由您創建的還是來自某處?如果它是由您創建的,我強烈建議更改其結構。如果任何地方的順序對你很重要,最好把它們放在數組中而不是對象屬性中。如果0對您很重要,請將這些數字保留爲字符串 – shinobi
它表示它不在他身上。我看到的唯一選擇是將數據推入數組以保持順序,然後將其轉換回來。這不能純粹用JSON來完成,因爲每個JS引擎都以不同的方式對它進行排序。 http://stackoverflow.com/questions/8931967/how-to-deterministically-verify-that-a-json-object-hasnt-been-修改 – JSB
對於這樣一個有限的用例,我會建議字符串操作,做一個子串搜索並找到密鑰及其值。然後替換/操作字符串。雖然這種方法效率低下,但考慮到您的限制...... –