2

我有一个 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);
4

2 回答 2

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它(不安全)或使用 JSON 解析器,. JSON.parse获得转换后的 JSON 对象后,您可以在标准 JS 中对其进行任何修改。然后,您可以使用同一个库将 JS 对象转换为 JSON 字符串 ( JSON.stringify)。Javascript 不允许文件访问(除非您正在执行服务器端 JS),因此这会阻止您直接读取和写入contact.txt文件。您必须使用服务器端语言(如 Python、Java 等)来读取和写入文件。

于 2009-10-11T15:00:45.680 回答
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 一样。

ps 我建议您遵守 JavaScript 约定并使用驼峰命名为您的变量名,除非您的工作地点有其他习俗。http://javascript.crockford.com/code.html

于 2009-10-11T14:59:32.500 回答