2009-10-11 122 views
2

我已被解析成稱爲JSONObj一個對象,其被構造這樣的JSON文件contact.txt編輯解析JSON

[ 
    { 
     "firstName": "John", 
     "lastName": "Smith", 
     "address": { 
      "streetAddress": "21 2nd Street", 
      "city": "New York", 
      "state": "NY", 
      "postalCode": "10021" 
     }, 
     "phoneNumbers": [ 
      { "type": "home", "number": "212 555-1234" }, 
      { "type": "fax", "number": "646 555-4567" } 
     ] 
    }, 

    { 
     "firstName": "Mike", 
     "lastName": "Jackson", 
     "address": { 
      "streetAddress": "21 Barnes Street", 
      "city": "Abeokuta", 
      "state": "Ogun", 
      "postalCode": "10122" 
     }, 
     "phoneNumbers": [ 
      { "type": "home", "number": "101 444-0123" }, 
      { "type": "fax", "number": "757 666-5678" } 
     ] 
    } 
] 

我設想通過從一種形式,從而取入數據編輯文件/對象添加更多聯繫人。我怎樣才能做到這一點?

添加新的聯繫人到JSONObj的陣列下面的方法似乎並不奏效,什麼問題?:

var newContact = { 
      "firstName": "Jaseph", 
      "lastName": "Lamb", 
      "address": { 
       "streetAddress": "25 2nd Street", 
       "city": "New York", 
       "state": "NY", 
       "postalCode": "13021" 
      }, 
      "phoneNumbers": [ 
       { "type": "home", "number": "312 545-1234" }, 
       { "type": "fax", "number": "626 554-4567" } 
      ] 
} 
var z = contact.JSONObj.length; 
contact.JSONObj.push(newContact); 
+0

我根據您的回覆更新了我的答案。 – 2009-10-11 16:39:36

+0

我已更新我的原始帖子以顯示我如何試圖操縱JSON對象。 – Fortisimo 2009-10-11 17:02:04

回答

0

一旦你在JSON已閱讀,你只是有一個關聯數組 - 或者你有一個僞關聯數組,因爲這是Javascript。無論哪種方式,你都可以把它當作一個大字典。您可以通過鍵和索引訪問它。

因此,與該對象玩:

var firstPerson = JSONObj[0]; 
var secondPerson = JSONObj[1]; 

var name = firstPerson['firstName'] + ' ' + firstPerson['lastName']; 

既然你通常會有兩個以上的人,你可能只是想通過您的列表中的每個詞典環,做一些事情:

for(var person in jsonList) { 

    alert(person['address']); 

} 

如果要編輯JSON並將其保存迴文件,然後將其讀入內存,編輯字典列表並重新寫回文件。

您的JSON庫將具有將JSON轉換爲字符串的功能,就像它將字符串轉換爲JSON一樣。

p.s.我建議你遵守JavaScript約定,並使用camelcase作爲你的變量名稱,除非你在你的工作地點有其他習俗。 http://javascript.crockford.com/code.html

1

這取決於您使用的是什麼技術。基本過程是讀取文件,使用JSON解析庫將其轉換爲任何本機數據類型(散列,字典,列表等),修改或添加數據到本機對象,然後將其轉換回JSON並存儲它到文件。

在Python,使用simplejson庫就應該是這樣的:

import simplejson 

jsonobj = simplejson.loads(open('contact.txt')) 

#python's dict syntax looks almost like JSON 
jsonobj.append({ 
    'firstName': 'Steve', 
    'lastName': 'K.', 
    'address': { 
      'streetAddress': '123 Testing', 
      'city': 'Test', 
      'state': 'MI', 
      'postalCode': '12345' 
    }, 
    'phoneNumbers': [ 
     { 'type': 'home', 'number': '248 555-1234' } 
    ] 
}) 

simplejson.dump(jsonobj, open('contact.txt', 'w'), indent=True) 

在這個例子中的數據是硬編碼字符串,但它可能來自其他文件或Web應用程序請求/表單數據等。如果你在網絡應用程序中這樣做,雖然我建議不要讀取和寫入同一個文件(如果兩個請求同時進入)。

如果這不能回答你的問題,請提供更多信息。


在回答「是不是有辦法做到這一點使用標準的JavaScript?」:

在JavaScript解析JSON字符串你可以eval它(不安全)或使用JSON解析器像this oneJSON.parse。一旦你有了轉換後的JSON對象,你可以在標準的JS中執行你想要的任何修改。然後,您可以使用該庫將JS對象轉換爲JSON字符串(JSON.stringify)。Javascript不允許文件訪問(除非你在做serverside JS),這樣可以防止你直接從&寫入contact.txt文件。您必須使用服務器端語言(如Python,Java等)來讀取和寫入文件。

+0

這正是我想要做的,是不是有辦法做到這一點使用標準的JavaScript? – Fortisimo 2009-10-11 16:12:11

+0

我基本上試圖展開對象的數組。使用push()似乎不起作用,什麼會起作用? – Fortisimo 2009-10-11 19:08:05