【问题标题】:How can i access sub elements in JSON doc如何访问 JSON 文档中的子元素
【发布时间】:2019-09-06 00:40:35
【问题描述】:

这是我的问题,我正在尝试解析具有多个对象但它们不是数组中的对象形式的对象。我的数据是这样的

{ "Jurisdiction": {
         "Mwd Water Stdby Chg": {
             "Tax Type": "Actual",
             "Tax Amount": "$10"
        },
         "Mosq/Fire Ant Assmt": {
             "Tax Type": "Actual",
             "Tax Amount": "$7"
        },
         "Vector Control Chg": {
             "Tax Type": "Actual",
             "Tax Amount": "$2"
        },
         "Total Of Special Assessments": {
             "Tax Type": "Actual",
             "Tax Amount": "$19"
        }
    }

我实际上正在尝试将其转换为 obj 数组,例如

{ "Jurisdiction":[{
         "Tax Name" : "Mwd Water Stdby Chg",
         "Tax Type": "Actual",
          "Tax Amount": "$10"
        }...]

我尝试了多种方法来访问元素下的税收类型等,但没有成功。

var obj = JSON.parse(result);
var keys = Object.keys(obj.Jurisdiction);

for (var i = 0; i < keys.length; i++) {


  console.log(keys[i]["Tax Type"])
  console.log([keys[i]]["Tax Type"])
}

全部返回未定义

【问题讨论】:

  • 既然keysobj.Jurisdiction的键,那么很明显你需要使用obj.Jurisdiction[keys[i]]
  • 您可能需要使用嵌套的Object.keys().forEach 并为区域推送元素。您还可以查看 lodash 库中的 .toArray 方法

标签: javascript arrays node.js json object


【解决方案1】:

mapObject.entries 一起使用:

const obj = {
  "Jurisdiction": {
    "Mwd Water Stdby Chg": {
      "Tax Type": "Actual",
      "Tax Amount": "$10"
    },
    "Mosq/Fire Ant Assmt": {
      "Tax Type": "Actual",
      "Tax Amount": "$7"
    },
    "Vector Control Chg": {
      "Tax Type": "Actual",
      "Tax Amount": "$2"
    },
    "Total Of Special Assessments": {
      "Tax Type": "Actual",
      "Tax Amount": "$19"
    }
  }
};

obj.Jurisdiction = Object.entries(obj.Jurisdiction).map(([k, v]) => ({ "Tax Name": k, ...v }));

console.log(obj);
.as-console-wrapper { max-height: 100% !important; top: auto; }

【讨论】:

    【解决方案2】:

    你应该使用 for in 循环来代替:

    var obj = { "Jurisdiction": {
             "Mwd Water Stdby Chg": {
                 "Tax Type": "Actual",
                 "Tax Amount": "$10"
            },
             "Mosq/Fire Ant Assmt": {
                 "Tax Type": "Actual",
                 "Tax Amount": "$7"
            },
             "Vector Control Chg": {
                 "Tax Type": "Actual",
                 "Tax Amount": "$2"
            },
             "Total Of Special Assessments": {
                 "Tax Type": "Actual",
                 "Tax Amount": "$19"
            }
          }
      }
    var jur = obj.Jurisdiction, j;
    for(var i in jur){
       j = jur[i];
       console.log(i);
       console.log(j['Tax Type']);
       console.log(j['Tax Amount']);
       console.log('-----------------------------');
    }

    【讨论】:

      【解决方案3】:

      您可以使用Object.entires()map()

      const obj = { "Jurisdiction": {
               "Mwd Water Stdby Chg": {
                   "Tax Type": "Actual",
                   "Tax Amount": "$10"
              },
               "Mosq/Fire Ant Assmt": {
                   "Tax Type": "Actual",
                   "Tax Amount": "$7"
              },
               "Vector Control Chg": {
                   "Tax Type": "Actual",
                   "Tax Amount": "$2"
              },
               "Total Of Special Assessments": {
                   "Tax Type": "Actual",
                   "Tax Amount": "$19"
              }
          }
      }
      
      let res = Object.entries(obj.Jurisdiction).map(x => ({'Tax Name':x[0],...x[1]}));
      obj.Jurisdiction = res;
      
      console.log(obj)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        相关资源
        最近更新 更多