2

次のように構造contact.txt化されたというオブジェクトに解析された JSON ファイルがあります。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 アプリでこれを行う場合は、同じファイルの読み取りと書き込みを行うことはお勧めしません ( 2 つのリクエストが同時に来た場合)。

これで質問の答えが得られない場合は、さらに情報を提供してください。


「標準の JavaScript を使用してこれを行う方法はありませんか?」に対する応答:

Javascript で JSON 文字列を解析するには、 (安全ではありません) またはこのevalような JSON パーサーを使用できます。変換された JSON オブジェクトを取得したら、標準の JS で任意の変更を行うことができます。その後、同じライブラリを使用して、JS オブジェクトを JSON 文字列 ( ) に変換できます。Javascript はファイル アクセスを許可しないため (サーバーサイド JSを実行している場合を除く)、ファイルを直接読み書きすることができなくなります。ファイルを読み書きするには、サーバー側の言語 (Python、Java など) を使用する必要があります。JSON.parseJSON.stringifycontact.txt

于 2009-10-11T15:00:45.680 に答える
0

JSON を読み込めば、連想配列を取得できます。これは Javascript であるため、疑似連想配列を取得できます。いずれにせよ、辞書の 1 つの大きなリストとして扱うことができます。キーとインデックスでアクセスできます。

したがって、このオブジェクトで遊ぶには:

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

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

通常は 2 人以上の人がいるので、リスト内の各辞書をループして何かをしたいだけかもしれません:

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 に答える