1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

JSON Property mit Bindestrich auslesen

Dieses Thema im Forum "Javascript & Ajax" wurde erstellt von tklustig, 16. Juli 2017.

  1. tklustig

    tklustig Grünschnabel

    Hallo Leute,habe folgende JSON-Datei
    Code (Javascript):
    1. {
    2.    "name": "yiisoft/yii2-app-advanced",
    3.    "description": "Yii 2 Advanced Project Template",
    4.    "keywords": ["yii2", "framework", "advanced", "project template"],
    5.    "homepage": "http://www.yiiframework.com/",
    6.    "type": "project",
    7.    "license": "BSD-3-Clause",
    8.    "support": {
    9.        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
    10.        "forum": "http://www.yiiframework.com/forum/",
    11.        "wiki": "http://www.yiiframework.com/wiki/",
    12.        "irc": "irc://irc.freenode.net/yii",
    13.        "source": "https://github.com/yiisoft/yii2"
    14.    },
    15.    "minimum-stability": "dev",
    16.    "require": {
    17.        "php": ">=5.4.0",
    18.        "yiisoft/yii2": "~2.0.6",
    19.        "yiisoft/yii2-bootstrap": "~2.0.0",
    20.        "yiisoft/yii2-swiftmailer": "~2.0.0"
    21.    },
    22.    "require-dev": {
    23.        "yiisoft/yii2-debug": "~2.0.0",
    24.        "yiisoft/yii2-gii": "~2.0.0",
    25.        "yiisoft/yii2-faker": "~2.0.0",
    26.        "codeception/base": "^2.2.3",
    27.        "codeception/verify": "~0.3.1"
    28.    },
    29.    "config": {
    30.        "process-timeout": 1800
    31.    },
    32.    "repositories": [
    33.        {
    34.            "type": "composer",
    35.            "url": "https://asset-packagist.org"
    36.        }
    37.    ]
    38. }
    wie lese ich die Properties minimum-stability bzw. require-dev aus??
    Folgender Code klappt:
    Code (Javascript):
    1. for(var j in daten.support){
    2. output+="<label>"+daten.support[j]+"<br></label>";
    3. }
    Folgendes Konstrukt wirft allerdings den Fehler 'qnips_JSON_Loesung.html:112 Uncaught ReferenceError: dev is not defined' aus
    Code (Javascript):
    1. for(var j in daten.require-dev){
    2. output+="<label>"+daten.require-dev[j]+"<br></label>";
    3. }
    Irgendwie scheint der Bindestrich Probleme zu machen. Tipps,wie ich dieses Problem lösen könnte?
     
  2. merzi86

    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:
    Code (Javascript):
    1. for(var j in daten.require-dev){
    2.    output+="<label>"+daten["require-dev"][j]+"<br></label>";
    3. }
    Ich habe es nicht getestet, müsste aber so passen.
     
  3. tklustig

    tklustig Grünschnabel

    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!
     
  4. merzi86

    merzi86 Erfahrenes Mitglied

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

    So passt die Schleife:
    Code (Javascript):
    1. for(var j in daten["require-dev"]){
    2.    output+="<label>"+daten["require-dev"][j]+"<br></label>";
    3. }
     
    tklustig gefällt das.
  5. tklustig

    tklustig Grünschnabel

    Bingo!
    Hatte erst versuch mittels
    Code (Javascript):
    1. var a=daten.require-dev
    2. 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: 16. Juli 2017
  6. ComFreek

    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:
    Code (Javascript):
    1. let keys = Object.keys(a);
    2. for (let i=0; i<keys.length; i++) {
    3.   // do something with a[keys[i]]
    4. }
    5.  
    6. // Oder mein Favorit: die for-of-Schleife
    7. for (let key of a) {
    8.   // do something with a[key]
    9. }
     
    merzi86 gefällt das.
Die Seite wird geladen...