2016-03-21 6 views
3

Ich habe ein JSON-Objekt wie dieseWie bekomme ich Json-Objekt und verschachteltes Objekt Eigenschaftsnamen und Werte in AngularJs?

{ 
 
    "from": { 
 
    "required": false, 
 
    "type": { 
 
     "name": { 
 
     "required": false, 
 
     "type": "String" 
 
     }, 
 
     "email": { 
 
     "required": true, 
 
     "type": "String" 
 
     } 
 
    } 
 
    }, 
 
    "to": { 
 
    "required": true, 
 
    "type": [ 
 
     { 
 
     "name": { 
 
      "required": false, 
 
      "type": "String" 
 
     }, 
 
     "email": { 
 
      "required": true, 
 
      "type": "String" 
 
     } 
 
     } 
 
    ] 
 
    }, 
 
    "subject": { 
 
    "required": true, 
 
    "type": "String" 
 
    }, 
 
    "text": { 
 
    "required": true, 
 
    "type": "String" 
 
    }, 
 
    "html": { 
 
    "required": true, 
 
    "type": "String" 
 
    } 
 
}

Das Objekt verschachtelte Objekte enthält, mit Eigenschaften von verschiedenen Diensten festgelegt zu werden. Daher werden Eigenschaftsnamen dynamisch geändert. Ich möchte Eigenschaftsnamen und entsprechende Werte erhalten. Ich habe den folgenden Code bereits ausprobiert.

for (var prop in data) { 
       $scope.fieldsInfo.push({ "label": prop, "required":data.hasOwnProperty(prop) }); 
      } 

In den obigen Code iam Namen bekommen (ab) und auch geforderten Wert, jetzt will ich verschachtelte Objekt Eigenschaftsnamen (Name, E-Mail) und auch (erforderlich, Typ) Werte innerhalb des Namensobjekts erhalten. In der obigen Aufgabe enthält fromtype ein Objekt ist so isArray:false und nächstes Objekt totype enthält ein Array ist so isArray:true verbleibenden Objekte type eine Zeichenfolge ist so isArray:false. Ausgabe wie folgt

$scope.fieldsInfo=[]; 
 

 
    $scope.fieldsInfo=[ 
 
         { 
 
         "label" :"from", 
 
         "required" :false, 
 
         "isArray" :false, 
 
         "type"  : [ 
 
             { 
 
             "label" :"name", 
 
             "type" : "String", 
 
             "required": false 
 
             } 
 
             { 
 
             "label" : "email", 
 
             "type" : "String", 
 
             "required": true 
 
             }      
 
            ] 
 
         }, 
 
         { 
 
         "label" :"to", 
 
         "required" :true, 
 
         "isArray" :true, 
 
         "type"  : [ 
 
             { 
 
             "label" : "name", 
 
             "type" : "String", 
 
             "required": false 
 
             } 
 
             { 
 
             "label" : "email", 
 
             "type" : "String", 
 
             "required": true 
 
             }      
 
            ] 
 
         }, 
 
         { 
 
         "label" :"subject", 
 
         "required" :true, 
 
         "isArray" :false, 
 
         "type"  :"String" 
 
         }, 
 
         { 
 
         "label" :"text", 
 
         "required" :true, 
 
         "isArray" :false, 
 
         "type"  :"String" 
 
         }, 
 
         { 
 
         "label" :"html", 
 
         "required" :true, 
 
         "isArray" :false, 
 
         "type"  :"String" 
 
         } 
 
        ]

Antwort

1

Ich bin nicht wirklich sicher, was Sie achive wollen, aber auf den Titel Ihrer Frage basiert, werde ich einige Grundlagen bieten JavaScript-Objekte/Arrays für den Umgang mit:

Iterieren über die Schlüssel mit for (var prop in data) {} (wie Sie) funktioniert nicht für verschachtelte Objekte. Ein möglicher Ansatz wäre die Verwendung einer rekursiven Funktion:

function get_keys_recursive (object_or_array) { 

    for (var key in object) 
     if (object[key] != null) //null is also a object 
      if (typeof object[key] === 'object') 
       get_keys_recursive (typeof object[key]); //recursive function call 
      else { 

       console.log (key); //here you get all keys 
       console.log (object[key]); //here you get the value 

      } 

} 

get_keys_recursive (your_object); //function call 

Sollte dies nicht Ihre Frage beantworten, geben Sie bitte detailliertere Informationen.

1
$scope.fieldsInfo = []; 
      $scope.type = []; 
      for (var prop in data) { 
       var isArray = angular.isArray(data[prop].type); 
       var isObject = angular.isObject(data[prop].type); 
       if (isArray) { 
        for (var nestedProp in data[prop].type[0]) { 
         $scope.type.push({ "label": nestedProp, "required": result.data.hasOwnProperty(nestedProp), "type": data[prop].type[0][nestedProp].type }); 
        } 
        $scope.fieldsInfo.push({ "label": prop, "required": result.data.hasOwnProperty(prop), "isArray": isArray, "type": $scope.type }); 
        $scope.type = []; 
       } 
       else 
        if (isObject) { 
         for (var nestedProp in data[prop].type) { 
          $scope.type.push({ "label": nestedProp, "required": data.hasOwnProperty(nestedProp), "type": data[prop].type[nestedProp].type }); 
         } 
         $scope.fieldsInfo.push({ "label": prop, "required": result.data.hasOwnProperty(prop), "isArray": isArray, "type": $scope.type }); 
         $scope.type = []; 
        } 
       else { 
        $scope.fieldsInfo.push({ "label": prop, "required": data.hasOwnProperty(prop), "isArray": isArray, "type": data[prop].type }); 
       } 
      } 
Verwandte Themen