javascript - 在 JavaScript 中获取 JSON 对象的 "path"

标签 javascript angularjs json

我正在尝试获取 AngularJS 作用域变量的“路径”,但运气不佳。我希望最终传递该“路径”以用作正在创建的一些动态表单的 ng-model

这是迄今为止我的代码:

my_code.js:

var my_data = {
  name: "fred",
  number: 1,
  children: [
    { name: "bob" },
    { name: "joe" },
    { name: "norman" },
  ]
};

function get_path(obj, target, path) {

  if (typeof path === "undefined" || path === null) { 
    path = "my_data";
  }

  for (var key in obj) {
    var value = obj[key];
    var value_type = value.constructor;

    /* value can either be an Array */
    if (value_type === Array) {
      for (var i=0; i<value.length; i++) {
        if (value[i] === target) {
          return path + "." + key + "[" + i + "]";
        }        
        var result = get_path(value, target, path + "." + key + "[" + i + "]");  
        if (result) {
          return result;
        }
      }
    }

    /* or an Object (dictionary) itself */
    else if (value_type === Object) {
      var result = get_path(value, target, path + "." + key);
      if (result) {
        return result;
      }
    }

    /* or something atomic (string, number, etc.) */
    else {
      if (value === target) {
        return path + "." + key;
      }
    }  
  }
  return false;
}

如果我将对象 my_data.children[0].name 传递给此函数,我希望它返回字符串 "my_data.children[0].name”。但它实际上返回“my_data.children[0].0.name”。关于我哪里出错了有什么想法吗?

附注- 我最初的想法来自Javascript/JSON get path to given subnode? ,但它不能处理数组。

最佳答案

我认为您的错误在于:

else if (value_type === Object) {

      var result = get_path(value, target, path + "." + key);
      if (result) {
        return result;
      }
    }

您已添加“。” + 键。只需将其删除,如下所示:

else if (value_type === Object) {

      var result = get_path(value, target, path  );
      if (result) {
        return result;
      }
    }

关于javascript - 在 JavaScript 中获取 JSON 对象的 "path",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36212134/

相关文章:

javascript - 使用 AJAX 将值从 JavaScript 传递到 PHP

javascript - 如何将 Bootstrap-Slider 中的工具提示设置为文本字符串与刻度值

javascript - Angular 要求指令打破了我自己的指令

json - 如何在 IntelliJ IDEA 中复制 JSON 中的路径?

java - 如何仅使用 json-simple 从嵌套对象中的键获取值

javascript - 如何向由对象数组组成的 JSON 对象的根添加属性?

javascript - 即使在输入正确的值后 HTML 表单仍显示错误

java - 让 Spring/Jackson 智能地反序列化模型子类

javascript - Angular : automatically set ordering in list view and show data as it is in $scope object

javascript - AngularJS 使用 angular-css 防止无样式内容(FOUC)的 Flash