2009-10-11 3 views
2

J'ai un fichier JSON contact.txt qui a été analysé dans un objet appelé JSONObj qui est structuré comme suit:Modifier analysable 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" } 
     ] 
    } 
] 

J'enVision éditant le fichier/objet en prenant des données à partir d'un formulaire afin que ajouter plus de contacts. Comment puis-je faire ceci?

La méthode suivante pour ajouter un nouveau contact à la matrice du JSONObj ne semble pas fonctionner, quel est le problème ?:

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

J'ai mis à jour ma réponse en fonction de votre réponse. –

+0

J'ai mis à jour mon article original pour montrer comment j'ai essayé de manipuler l'objet JSON. – Fortisimo

Répondre

0

Une fois que vous avez lu dans le JSON, vous avez juste un tableau associatif - ou plutôt vous avez un tableau pseudo-associatif, puisque c'est Javascript. De toute façon, vous pouvez traiter la chose comme une grande liste de dictionnaires. Vous pouvez y accéder par clé et index.

Donc, pour jouer avec cet objet:

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

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

Puisque vous aurez généralement plus de deux personnes, vous voulez probablement juste faire une boucle à travers chaque dictionnaire dans votre liste et faire quelque chose:

for(var person in jsonList) { 

    alert(person['address']); 

} 

Si vous souhaitez modifier le fichier JSON et l'enregistrer dans un fichier, lisez-le en mémoire, modifiez la liste des dictionnaires et réécrivez-le dans le fichier.

Votre bibliothèque JSON aura une fonction pour transformer JSON en une chaîne, tout comme elle transforme une chaîne en JSON.

p.s. Je vous suggère d'observer les conventions JavaScript et d'utiliser camelcase pour vos noms de variables, sauf si vous avez d'autres coutumes sur votre lieu de travail. http://javascript.crockford.com/code.html

1

Cela dépend de la technologie que vous utilisez. Le processus de base consiste à lire le fichier, à le convertir en n'importe quel type de données natif (hachage, dict, liste, etc.) en utilisant une bibliothèque d'analyse JSON, modifier ou ajouter des données à l'objet natif, puis le convertir en JSON. au fichier.

En Python, en utilisant la bibliothèque simplejson il ressemblerait à ceci:

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) 

Les données dans cet exemple est chaînes codées en dur, mais il pourrait provenir d'un autre fichier ou une demande de données/formulaire application Web, etc. Si vous le faites dans une application web, je vous déconseille de lire et d'écrire dans le même fichier (dans le cas où deux demandes arrivent en même temps).

Veuillez fournir plus d'informations si cela ne répond pas à votre question.


En réponse à «n'est pas là façon de le faire en utilisant javascript norme? »:

Pour analyser une chaîne JSON en Javascript, vous pouvez eval il (pas sûr) ou utiliser un analyseur de JSON comme this one est JSON.parse. Une fois que vous avez l'objet JSON converti, vous pouvez effectuer toutes les modifications que vous voulez dans JS standard. Vous pouvez ensuite utiliser cette même bibliothèque pour convertir un objet JS en une chaîne JSON (JSON.stringify).Javascript ne permet pas l'accès au fichier (sauf si vous faites serverside JS), ce qui vous empêcherait de lire directement & dans votre fichier contact.txt. Vous devez utiliser un langage côté serveur (tel que Python, Java, etc.) pour lire et écrire le fichier.

+0

C'est exactement ce que je veux faire, n'est-il pas possible de le faire en utilisant javascript standard? – Fortisimo

+0

Essentiellement, j'essaie d'étendre le tableau de l'objet. Utiliser push() ne semble pas fonctionner, qu'est-ce qui va marcher? – Fortisimo