我正在开发一个项目,我必须使用动态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。
答案 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>
希望有所帮助