通过指定完整路径获取 JSON 子值时出现问题

issue with getting JSON child values by specifying full path

本文关键字:问题 JSON 获取 路径      更新时间:2023-09-26

我有以下 JSON 响应

{
    "r": [{
            "IsDefault": false,
            "re": {
                    "Name": "Depo"            
                  },
            "Valid": "Oct8, 2013",
            "Clg":[ {
                      "Name": "james",
                      "Rate": 0.05
                    },   
                    {
                      "Name": "Jack",
                      "Rate": 0.55
                    }, 
                    {
                      "Name": "Mcd",
                      "Rate": 0.01,
                    }],
        },
      {
          "IsDefault": false,
          "re": {
                  "Name": "Depo"
                },
         "Valid": "Oct8, 2013",
         "Clg": [{
                   "Name": "james",
                   "Rate": 0.05
                 }, 
                 {
                   "Name": "Jack",
                   "Rate": 0.55
                 }, 
                 {
                   "Name": "Mcd",
                   "Rate": 0.01,
                 }],
      },
    {
        "IsDefault": false,
        "re": {
                "Name": "Depo"
              },
        "Valid": "Oct8, 2013",
        "Clg": [{
                  "Name": "james",
                  "Rate": 0.05
                }, 
                {
                  "Name": "Jack",
                  "Rate": 0.55
                }, 
                {
                  "Name": "Mcd",
                  "Rate": 0.01,
                }],
     }]
}

我正在使用 $.getJSON 方法来加载 JSON 数据并通过检查它是否是数组将其添加到集合中,如下所示。它按预期工作正常。

var res = loadFromJson(result.r);
loadFromJson = function(input) {
    if (_.isArray(input)) {
    console.log("Inside Array");
      var collection = new CompeCollection();
      _.each(input, function(modData) {
        collection.add(loadFromJson(modData));
        console.log("collection length:"+modData.length);
      });
      return collection;
    }
  };

但是当我尝试指定我的 JSON 响应的确切路径 (r.Clg) 时,它甚至没有达到上述条件,尽管它是有效的响应。

 var res = loadFromJson(result.r.Clg);
loadFromJson = function(input) {
    if (_.isArray(input)) {
    console.log("Inside Array");
      var collection = new CompeCollection();
      _.each(input, function(modData) {
        collection.add(loadFromJson(modData));
        console.log("collection length:"+modData.length);
      });
      return collection;
    }
  };

当我需要指定实际路径或完整路径时,我该怎么办?

谁能告诉我当我传递更具体的 json 值时可能有什么问题?

提前谢谢。

>result.r.Clg不存在。 result.r是一个数组。

如果只想访问 r 数组中的第一个对象,则可以执行以下操作:

var res = loadFromJson(result.r);
var clg = res[0].Clg;

或者你可以遍历所有对象,也许在一个数组中捕获所有 Clg:

var clgs = res.map(function (obj) { return obj.Clg; }, []);