2010-12-10 17 views
2

Ich habe den folgenden Code in JavascriptLesen eines Javascript Object

var result = { 
    'org.apache.struts' : '4567ty5y7u8j89hjk789', 
    'firstName' : 'Thorpe', 
    'surName' : 'Obazee' 
} 

Wenn ich versuche Ergebnis zu lesen:

// this works 
sys.puts(result.firstName) // returns Thorpe 
sys.puts(result.surName) // returns Obazee 

Das Problem kommt, wenn ich die andere Eigenschaft lesen

sys.puts(result.org.apache.struts) // return an error 

Error: Expected 'TypeError: Cannot read property 'apache' of undefined

Wie soll ich das lesen, damit ich ac Ich nehme die Informationen, die ich gestellt habe?

+0

Wenn Sie "this works" sagen, nehme ich an, dass Sie den Code nicht kopiert und eingefügt haben, weil Ihr Objektliteral in der Frage nicht das '=' Symbol verwenden sollte, um den Namen und den Wert zu trennen a ':'). –

+1

@Andy E. haha. Das tut mir leid . Ich schrieb und schaute nicht auf den Code. Fest. –

Antwort

9

können Sie bracket notation verwenden, um Eigenschaften, deren Namen Zeichen für den Zugriff ungültig für Punktnotation enthalten:

result["org.apache.struts"] 

Wenn Sie weitere Ebene zu Ihrem Objekt hinzufügen mögen, so dass Sie Punktnotation verwenden können, müssen Sie eine andere erklären Objekt für jede Ebene, zB:

var result = { 
    org: { apache: { struts: '4567ty5y7u8j89hjk789' } }, 
    firstName: 'Thorpe', 
    surName: 'Obazee' 
} 

alert(result.org.apache.struts); 
+1

+1 - Für weitere Informationen: https://developer.mozilla.org/de/JavaScript/Reference/Operators/Member_Operators#Bracket_notation –

+0

@Downvoter: Möchten Sie erklären, was an meiner Antwort nicht stimmt? –

3

Das Problem ist, dass man es als Ganzes Schlüssel anstelle eines anderen Objekts, greifen Sie wie result['org.apache.struts'] sind hinzufügen.

Oder Sie können die Art und Weise Sie Ergebnis erstellen ändern:

var result = { 
    org : { 
     apache : { 
      struts : '4567ty5y7u8j89hjk789' 
     } 
    } 
    'org.apache.struts' = '4567ty5y7u8j89hjk789', 
    'firstName' = 'Thorpe', 
    'surName' = 'Obazee' 
} 
2

Das Problem ist, dass Ihre variable Punkte in ihm hat. Ich würde vermuten, dass Javascript dies als verschachtelte Objekte interpretiert, die nicht wirklich existieren. Verwenden Sie also

result["org.apache.struts"] 

, um den Wert zu erhalten.

2

Sie müssen ':' zwischen den Beschriftungen und Werten des Objekts verwenden und 'org.apache' als Objekt definieren. Wie folgt aus:

var result = { 
    org: {apache: {struts: '4567ty5y7u8j89hjk789'}}, 
    firstName: 'Thorpe', 
    surName: 'Obazee' 
} 

Wenn Sie uns wünschen ‚org.apache.struts‘ als echte Label, Andy E Antwort ist die Lösung.