从半动态JSON文件中获取值

时间:2016-11-27 23:33:34

标签: javascript json object

我正在开发一个项目,我必须使用动态JSON文件中的数据。这是JSON文件的外观示例。

{
    "selectors": {
        "title": {
            "css": ".title"
        },
        "url": {
            "css": ".url"
        }
    }
}

因为JSON文件的内容是动态的,所以我无法访问对象,例如:

var data = '{"selectors":{"title":{"css":".title"},"url":{"css":".url"}}}';
var json = JSON.parse(data);   
var element = json.selectors.title.css;

但是,有两个对象始终具有相同的名称,而选择器 css

现在,如果它们是动态的,我如何访问标题网址类别时间这些对象?然后通过那些访问 css 对象?

我需要vanila JavaScript,而不是jQuery。

1 个答案:

答案 0 :(得分:1)

因为您不知道是否存在特定属性,所以您需要遍历所有属性:

df_new = merge(x=dfA, y=dfB, by.x  ="NEW" , by.y="Asset_NO")[,-1]
print(df_new)

# Type No
# 1   Test1 11000  1
# 2   11000 Test2  1
# 3   Test3 11000  1
# 4   11000 Test4  1
# 5   Test5 11001  2
# 6   Test6 11002  3
# 7   Test7 11003  4
# 8   Test8 11004  5
# 9   Test9 11004  5
# 10 Test10 11006  7

但是为了确保只循环通过有效对象(而不是其他人可能已经篡改过的东西),你应该检查hasOwnProperty:

var json = JSON.parse(data); 
for (key in json) {

}

现在您确定循环遍历第一级属性,在您的示例中仅属性var json = JSON.parse(data); for (key in json) { if (json.hasOwnProperty(key) { } } 。现在您可以添加另一个循环来检查第二级属性:

selectors

这可能会有点乱,但因为你期望一个特定的结构,你可以检查这些属性:

var json = JSON.parse(data); 
for (key in json) {
  if (json.hasOwnProperty(key) {
    for (second_level in key) {
      if (key.hasOwnProperty(second_level) {
        if (second_level == 'title') { /* do something with title */ }
        if (second_level == 'url') { /* do something with url */ }
      }  
    }
  }
}

我们可以直接访问属性title和url,因为在json中这些是对象(if (json.hasOwnProperty('selectors') { if (json.selectors.hasOwnProperty('title') { /* do something with title*/ } if (json.selectors.hasOwnProperty('url') { /* do something with url */ } } )而不是数组({}),如果它们是数组,则需要循环遍历它们。 / p>

希望有所帮助