javascript - 如何在 AngularJs 中获取 json 对象和嵌套对象的属性名称和值?

标签 javascript angularjs json

我有一个像这样的 json 对象

{
  "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"
  }
}

该对象包含嵌套对象,具有从各种服务设置的属性。因此,属性名称是动态更改的。我想获取属性名称和各自的值。我已经尝试过以下代码。

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

在上面的代码中,我还获取了属性名称 (from) 和所需的值,现在我想获取嵌套的对象属性名称 (name,email) 以及名称对象中的 (required,type) 值。在上面的对象 from 包含 type 是一个对象所以 isArray:false 和下一个对象 to 包含 type 是一个数组,所以 isArray:true 剩余对象 type 是一个字符串,所以 isArray:false。 像这样输出

$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" 
                      }
                    ]

最佳答案

我不太确定你想要实现什么,但根据你的问题标题,我将提供一些处理 javascript 对象/数组的基础知识:

使用 for (var prop in data) {} 遍历键(就像您所做的那样)不适用于嵌套对象。一种可能的方法是使用递归函数:

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

如果这不能回答您的问题,请提供更详细的信息。

关于javascript - 如何在 AngularJs 中获取 json 对象和嵌套对象的属性名称和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122299/

相关文章:

javascript - 如何使用 Javascript 取消 HTML5 拖放操作?

javascript - 使用 jQuery.ajax 请求将对象数组发送到 PHP 函数

javascript - Angular "controller as syntax" "this"数据

angularjs - 如何在 AngularJS 中通过 ng-show 触发 Bootstrap 弹出窗口

javascript - 如何在CKEditor中添加浏览器服务器上传图片

c# - 如何重命名和重新映射具有非法 json 字段名称的字段

javascript - 从字符串转换为 lambda

javascript - 无法导入three.js glTF模型

javascript - 是否可以计算 Angular 谷歌地图中两个标记之间的距离?

json - 输入递归 golang 函数调用