2010-11-22 6 views
1

wenn toSource Methode zu einem Objekt verwendet wird ..es wie dieseJavascript toSource dann toObject

({name:"myname", value:"myvalue"}) 

meine Frage sein wird, ist, wie würden Sie es konvertieren zurück zum Objekt? oder vielmehr Zugriff nur die Eigenschaften wie

alert(objectName.name); 

so alarmiert „myname“

Antwort

2

Verwenden eval es Objekt zurück zu einem ändern. alert(eval({name:"myname"}.toSource()).name).

+0

Das Entfernen der Klammern bei eval funktioniert nicht. Sie nicht zu strippen. Quelle: willcode4beer.com/tips.jsp?set=jsonInvalidLabel –

2

toSource() gibt einen String zurück, so dass Sie .replace() Methode der Javascript verwenden können, es einen regulären Ausdruck vorbei an den Klammern abzustreifen und dann JSON.parse() auf der resultierende String nennen es in ein Objekt zurück zu drehen.

so wie:

var obj = {name: "myname", value:"myvalue"}; 
var toSourced = obj.toSource(); 
var stringObj = toSourced.replace(/\((.*)\)/, "$1"); 
var objAgain = JSON.parse(stringObj); 
alert(objAgain.name); 

Als Randnotiz wird toSource() nicht durch IE oder Chrome unterstützt, und Sie sollten es Gebrauch vermeiden, wie Sie es JSON.stringify() vorbei, ein JSON-Objekt in einen String verwandeln Das ist nativ in IE8 +, Firefox und Chrome.

+0

uhh ... was wäre, wenn einer der String-Werte des Objekts Klammern hätte? – Pointy

+0

Deshalb habe ich das '. *' Nicht gierig gemacht. Es ist absichtlich gierig, so dass es so viele ')' in der Haupt-json-Folge wie möglich überspringt und fast immer bei der letzten aufhört, es sei denn, jemand hat einen verrückten JSON. – Alex

+0

Die von 'toSource' zurückgegebene Zeichenfolge ist kein gültiger JSON (auch wenn die Klammern entfernt sind), da die Eigenschaftsnamen nicht in Anführungszeichen gesetzt werden. Einige Objekttypen (wie "Date" und "Number") werden ebenfalls auf nicht-JSON-kompatible Weise serialisiert. 'eval' sollte in den meisten Fällen funktionieren. –

Verwandte Themen