JSON Property mit Bindestrich auslesen


tklustig

Erfahrenes Mitglied
Hallo Leute,habe folgende JSON-Datei
Javascript:
{
   "name": "yiisoft/yii2-app-advanced",
   "description": "Yii 2 Advanced Project Template",
   "keywords": ["yii2", "framework", "advanced", "project template"],
   "homepage": "http://www.yiiframework.com/",
   "type": "project",
   "license": "BSD-3-Clause",
   "support": {
       "issues": "https://github.com/yiisoft/yii2/issues?state=open",
       "forum": "http://www.yiiframework.com/forum/",
       "wiki": "http://www.yiiframework.com/wiki/",
       "irc": "irc://irc.freenode.net/yii",
       "source": "https://github.com/yiisoft/yii2"
   },
   "minimum-stability": "dev",
   "require": {
       "php": ">=5.4.0",
       "yiisoft/yii2": "~2.0.6",
       "yiisoft/yii2-bootstrap": "~2.0.0",
       "yiisoft/yii2-swiftmailer": "~2.0.0"
   },
   "require-dev": {
       "yiisoft/yii2-debug": "~2.0.0",
       "yiisoft/yii2-gii": "~2.0.0",
       "yiisoft/yii2-faker": "~2.0.0",
       "codeception/base": "^2.2.3",
       "codeception/verify": "~0.3.1"
   },
   "config": {
       "process-timeout": 1800
   },
   "repositories": [
       {
           "type": "composer",
           "url": "https://asset-packagist.org"
       }
   ]
}
wie lese ich die Properties minimum-stability bzw. require-dev aus??
Folgender Code klappt:
Javascript:
for(var j in daten.support){
output+="<label>"+daten.support[j]+"<br></label>";
}
Folgendes Konstrukt wirft allerdings den Fehler 'qnips_JSON_Loesung.html:112 Uncaught ReferenceError: dev is not defined' aus
Javascript:
for(var j in daten.require-dev){
output+="<label>"+daten.require-dev[j]+"<br></label>";
}
Irgendwie scheint der Bindestrich Probleme zu machen. Tipps,wie ich dieses Problem lösen könnte?
 

merzi86

Erfahrenes Mitglied
Hallo tklustig,
er Probiert durch den Bindestrich eine Rechenoperation durchzuführen.

Es Probiert dafür die Variable daten.require auszulesen und Subtrahiert davon den Wert der im Array dev an der Position j steht.

Da findet er nichts und deshalb zeigt er nichts an.
Du hast jetzt 2 Möglichkeiten:
1. keine Properties mit einen Bindestrich oder
2. die Abfrage etwas anders aufbauen

Die 2. Variante könnte so aussehen:
Javascript:
for(var j in daten.require-dev){
   output+="<label>"+daten["require-dev"][j]+"<br></label>";
}

Ich habe es nicht getestet, müsste aber so passen.
 

tklustig

Erfahrenes Mitglied
Erstma' Danke für die rasche Hilfe. Leider habe ich keine Möglichkeit, die JSON zu manipulieren.
Deine Variante klappt leider nicht. Derselbe Fehler!
Das Problem liegt im Schleifenrumpf!
 

merzi86

Erfahrenes Mitglied
Ja du hast recht, ich habe das 1x übersehen :D
Bitte Entschuldige.

So passt die Schleife:
Javascript:
for(var j in daten["require-dev"]){
   output+="<label>"+daten["require-dev"][j]+"<br></label>";
}
 

tklustig

Erfahrenes Mitglied
Bingo!
Hatte erst versuch mittels
Javascript:
var a=daten.require-dev
for(var j in a){....}
das Problem zu lösen,allerdings nur undefined-Werte zurück bekommen.
Deine Lösung ist perfekt. Vielen Dank auch. Werde hiermit diesen thread als gelöst beenden.
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Die for-in-Schleife ist übrigens immer ein bisschen problematisch, weil du auch andere Dinge aus dem Prototype auslesen kannst als nur die reinen Keys. Anstatt hier z. B. das bekannte Pattern mit hasOwnProperty zu bemühen, kannst du auch einfach über Object.keys(dict) iterieren:
Javascript:
let keys = Object.keys(a);
for (let i=0; i<keys.length; i++) {
  // do something with a[keys[i]]
}

// Oder mein Favorit: die for-of-Schleife
for (let key of a) {
  // do something with a[key]
}
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.832
Neuestes Mitglied
SirrDansen