2011-05-05 2 views
2

Permettez-moi de préface avec l'admission que je suis une programmation complète et javascript noob et ce fait est la source de mes problèmes. J'essaie de remplir un grand nombre d'objets personnalisés à partir d'un fichier texte que j'ai enregistré avec json.stringify. Quand je prends le contenu du fichier et JSON.parse (les), je reçois l'erreur suivante:JSON Erreur lors de l'analyse "... n'a pas de méthode" remplacer ""

var backSlashRemoved = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@' 
          ^
TypeError: Object (contents of file) has no method 'replace' 

Le code qui provoque cette erreur:

fs.readFile('/savedcustomobjectarray', function (err, data) { 
    var customobjectarray = json.parse(data); 
}); 

Je devine que je vais à ce sujet tout faux. J'ai vu des gens mentionner des sérialiseurs pour ce genre de choses, mais je voulais vérifier si c'était ce dont j'avais besoin (et peut-être obtenir une direction pour les utiliser dans ce contexte). Il semble que la sortie stringify soit bonne, donc je ne sais pas pourquoi JSON ne peut pas tout simplement remettre humpty dumpty ensemble. Toute aide serait grandement appréciée.

EDIT: La ligne text.replace se trouve dans /vendor/commonjs-utils/lib/json-ext.js, pas mon code. J'ai supposé que cela faisait partie de JSON. Peut-être que je me trompe? Existe-t-il une manière différente d'analyser mon tableau d'objets via JSON?

+9

'.replace' ne peut être appelé que sur une chaîne. Vérifiez si le texte est une chaîne ou un autre objet – JohnP

+1

Qu'est-ce que vous essayez exactement de faire avec votre regex? –

+0

@JohnP Je ne sais pas comment appliquer ce que vous avez dit. Le texte du fichier est le fichier JSON stringifié, et le fichier text.replace ne se trouve pas dans mon code mais provient plutôt du code json.parse (data). – clixby

Répondre

5

fs.readFile prend 2 ou 3 arguments, lors du passage que le nom de fichier et un rappel, votre fonction de rappel obtiendra les deux arguments suivants (err, data)data est un buffer brut.

Ainsi, la bonne façon de le faire serait:

fs.readFile('/savedcustomobjectarray', function (err, data) { 
    var customobjectarray = JSON.parse(data.toString('utf8')); 
}); 

data.toString prend l'encodage comme premier argument.

Alternitavley vous pouvez spécifier l'encodage comme second argument à la fs.readFile et ont passer une chaîne à la fonction de rappel:

fs.readFile('/savedcustomobjectarray', 'utf8', function (err, data) { 
    var customobjectarray = JSON.parse(data); 
}); 

API Node docs est votre meilleur ami!

Questions connexes