2014-06-15 77 views
-2

我有一個JSON對象解析,我試圖導航到SHIPPINGCOMMENTS並更新它,但是當我這樣做時,它將使用該名稱而不是僅更新所有單元格。在JSON更新中更新elemint全部

{ 
    "id": 1402846607011, 
    "status": "unsaved", 
    "accounts": [ 
     { 
      "compid": 919759, 
      "compname": null, 
      "products": [ 
       { 
        "BCINUM": "539504", 
        "ITEMUNIT": "EA", 
        "ORDERDETAILS": [ 
         { 
          "SHIPDATEID": "69230", 
          "SHIPPERIODID": "2096", 
          "QUANTITY": "1" 
         }, 
         { 
          "SHIPDATEID": "69231", 
          "SHIPPERIODID": "2096", 
          "QUANTITY": "2" 
         } 
        ], 
        "SHIPPINGCOMMENTS": "sooner" 
       } 
      ] 
     }, 
     { 
      "compid": 920001, 
      "compname": null, 
      "products": [ 
       { 
        "BCINUM": "539504", 
        "ITEMUNIT": "EA", 
        "ORDERDETAILS": [ 
         { 
          "SHIPDATEID": "69230", 
          "SHIPPERIODID": "2096", 
          "QUANTITY": "1" 
         }, 
         { 
          "SHIPDATEID": "69231", 
          "SHIPPERIODID": "2096", 
          "QUANTITY": "2" 
         } 
        ], 
        "POTEXT": "", 
        "SHIPPINGCOMMENTS": "sooner" 
       } 
      ] 
     } 
    ] 
} 

這裏是我的代碼,我通過它與循環:

function updateComments(compID,bcinum,comment) { 
    var accounts = runningOrders.accounts; 
    var n = accounts.length; 
    for (i = 0; i < n; i++) { 
     if (accounts[i].compid == compID) { 
      var p = accounts[i].products.length; 
      for (ii = 0; ii < p; ii++) { 
       if (accounts[i].products[ii].BCINUM == bcinum) { 
        accounts[i].products[ii].SHIPPINGCOMMENTS = comment; 
       } 
      }  
     } 
    } 
} 

函數調用是:

updateComments(919759,539504,sooner); 
+1

你的代碼沒有像你描述的是什麼東西。 http://jsfiddle.net/KZaLz/ –

+0

您的代碼正在爲我工​​作。只有compid 919759和BCINUM 539504下的SHIPPINGCOMMENTS纔會更新。也許我們需要看到更多的代碼。 – bloodyKnuckles

+0

您的代碼可以執行您描述的唯一方法是如果'products'數組中引用的所有對象都是對同一對象的引用。 JS中不會複製對象。但是,您說這是JSON,JSON不會轉換對象引用,所以如果是這種情況,那麼您將排除一些非常相關的代碼。 –

回答

0

兩個潛在的問題:

  1. 當計算ñ ,你實際上並沒有計算acconts arr的大小唉?你的(JSON)對象的名稱是什麼?
  2. 在您的示例函數調用中,您將名稱更改爲兩個對象中已定義的名稱。這是一個錯誤嗎?

此代碼爲我工作中的Node.js:

function updateComments(compID,bcinum,comment) { 
    var n = accounts.accounts.length; 
    console.log(n); 
    console.log(accounts['accounts'][0].products); 
    console.log(accounts['accounts'][1].products); 
    for (i = 0; i < n; i++) { 
    console.log('testing ', i, accounts.accounts[i].compid) 
    if (accounts.accounts[i].compid == compID) { 
     var p = accounts.accounts[i].products.length; 
     console.log('Found compid', i, compID); 
     for (ii = 0; ii < p; ii++) { 
     if (accounts.accounts[i].products[ii].BCINUM == bcinum) { 
      console.log('Found bcinum', ii, bcinum) 
      accounts.accounts[i].products[ii].SHIPPINGCOMMENTS = comment; 
     } 
     } 
    } 
    } 
    console.log(accounts['accounts'][0].products); 
    console.log(accounts['accounts'][1].products); 
} 

accounts = { 
"id": 1402846607011, 
"status": "unsaved", 
"accounts": 
[ 
    { 
     "compid": 919759, 
     "compname": null, 
     "products": [ 
      { 
       "BCINUM": "539504", 
       "ITEMUNIT": "EA", 
       "ORDERDETAILS": [ 
        { 
         "SHIPDATEID": "69230", 
         "SHIPPERIODID": "2096", 
         "QUANTITY": "1" 
        }, 
        { 
         "SHIPDATEID": "69231", 
         "SHIPPERIODID": "2096", 
         "QUANTITY": "2" 
        } 
       ], 
       "SHIPPINGCOMMENTS": "sooner" 
      } 
     ] 
    }, 
    { 
     "compid": 920001, 
     "compname": null, 
     "products": [ 
      { 
       "BCINUM": "539504", 
       "ITEMUNIT": "EA", 
       "ORDERDETAILS": [ 
        { 
         "SHIPDATEID": "69230", 
         "SHIPPERIODID": "2096", 
         "QUANTITY": "1" 
        }, 
        { 
         "SHIPDATEID": "69231", 
         "SHIPPERIODID": "2096", 
         "QUANTITY": "2" 
        } 
       ], 
       "POTEXT": "", 
       "SHIPPINGCOMMENTS": "sooner" 
      } 
     ] 
    } 
] 
} 
+1

1. JSON對象的名稱是runningOrders,所以我將「accounts.accounts」的引用更改爲「runningOrders.accounts」,並且我使用了你的函數,並得到了相同的結果。這聽起來像是我遇到的問題。我不想在兩個對象中更改關鍵的SHIPPINGCOMMENTS值,只有我正在導航的那個對象。這個JSON對象快照是在我將第一個更新爲「Sooner」之後拍攝的。 – Dan

+0

@Dan:他的觀點2只是觀察到,當所有的值都已經「更早」的時候,你的問題就好像你試圖將值設置爲「更快」。您的問題未能說明提供的JSON標記代表函數調用後的快照*。 –

+0

@Dan:如果你像我一樣添加相同的打印件,輸出是什麼? – Civing