我有一个JSON文件contact.txt
已被解析为一个名为JSONObj
的对象,其结构如下:
[
{
"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 :(得分: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应用程序请求/表单数据等。如果您在Web应用程序中执行此操作,但我会建议不要读取和写入相同的文件(如果有两个请求同时进入)。
如果这不能解答您的问题,请提供更多信息。
回应“使用标准javascript无法做到这一点?”:
要在Javascript中解析JSON字符串,您可以eval
它(不安全)或使用this one的JSON.parse
之类的JSON解析器。获得转换后的JSON对象后,您可以在标准JS中执行所需的任何修改。然后,您可以使用相同的库将JS对象转换为JSON字符串(JSON.stringify
)。 Javascript不允许文件访问(除非您正在执行serverside JS),因此这会阻止您阅读&直接写入contact.txt
文件。您必须使用服务器端语言(如Python,Java等)来读取和写入文件。
答案 1 :(得分: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