Javascript 如何在函数中运行json绝对路径
我有一个JSON对象Javascript 如何在函数中运行json绝对路径,javascript,json,Javascript,Json,我有一个JSON对象 stateObj:{ template: { cache:false, ref :"templates/pages/menu", searchability: true, path: "content.AdminFichiers.aPropos.administrateurs", lastUpdate: "Dernières m
stateObj:{
template: {
cache:false,
ref :"templates/pages/menu",
searchability: true,
path: "content.AdminFichiers.aPropos.administrateurs",
lastUpdate: "Dernières mises à jour"
}
}
我这样称呼它
updatedata (stateObj.template.path);
更新容器的函数如下所示
function updatedata (dataObj){
var final = "stateObj",
nameSplit = dataObj.split("."),
uls = document.createElement("ul");
for(i in nameSplit) {
final += '["' + nameSplit[i] +'"]'
}
console.log(final);
for(var i in final){
console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]);//this shows me the object
console.log(final);//this shows me stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"] but i want the object
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
这是我最后得到的
为什么我到处都不清楚
当我这样做的时候
for(var i in final){console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]); }
它将结果显示为对象
我怎么跑
stateObj[“内容”][“管理员”][“aPropos”][“管理员”]
在对象上发生这种情况是因为当您将
nameSplit
拆分为for-in循环时,每个字母来自每个字符串。因此,只需使用toString()
函数即可使函数正常工作
使用此代码:
function updatedata (dataObj){
var final = "stateObj",
nameSplit = dataObj.split("."),
uls = document.createElement("ul");
classList(uls).add("row", "text-center");
for(i in nameSplit) {
final += ' ["' + nameSplit[i] +'"]'
}
final = final.toString().split(" ");
console.log(final);
for(var i in nameSplit){
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
函数更新数据(dataObj){
var final=“stateObj”,
nameSplit=dataObj.split(“.”),
uls=document.createElement(“ul”);
类列表(uls).添加(“行”,“文本中心”);
对于(名称中的i){
最终+='[“'+nameSplit[i]+''']'
}
final=final.toString().split(“”);
控制台日志(最终);
for(nameSplit中的变量i){
uls.innerHTML+=“Prenom:+final[i][“Prenom”]+“Nom:+final[i][“Nom”]+”电话:“+final[i][“Tel”]+”邮件:“+final[i][“Mail”+”本地化:“+i+” ”
}
contentElement.appendChild(uls)
}
希望对你有用:)
这是它发生的原因,因为当您在for-in循环中拆分
nameSplit
时,每个字母都来自每个字符串。因此,只需使用toString()
函数即可使函数正常工作
使用此代码:
function updatedata (dataObj){
var final = "stateObj",
nameSplit = dataObj.split("."),
uls = document.createElement("ul");
classList(uls).add("row", "text-center");
for(i in nameSplit) {
final += ' ["' + nameSplit[i] +'"]'
}
final = final.toString().split(" ");
console.log(final);
for(var i in nameSplit){
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}
函数更新数据(dataObj){
var final=“stateObj”,
nameSplit=dataObj.split(“.”),
uls=document.createElement(“ul”);
类列表(uls).添加(“行”,“文本中心”);
对于(名称中的i){
最终+='[“'+nameSplit[i]+''']'
}
final=final.toString().split(“”);
控制台日志(最终);
for(nameSplit中的变量i){
uls.innerHTML+=“Prenom:+final[i][“Prenom”]+“Nom:+final[i][“Nom”]+”电话:“+final[i][“Tel”]+”邮件:“+final[i][“Mail”+”本地化:“+i+” ”
}
contentElement.appendChild(uls)
}
希望对你有用:)
以下是,因为您试图访问一个没有对象属性的对象属性。您的final[i]将在上面打印的最后一个字符串的第i个位置返回一个字符final[i]将返回字符,而不是对象。因此,您最终不会得到类似于final[i][prenom”]的值,因为您试图访问没有对象属性。您的final[i]将在上面打印的最后一个字符串的第i个位置返回一个字符final[i]将返回字符,而不是对象。因此,你不可能得到类似于final[i][“prenom”]编辑:的值。在重新回答问题后,你把它弄清楚了。您需要一种将字符串
“a[x][y][z]”
转换为它所指向的实际对象的方法
不建议使用eval,您可以做的是:
- 从对象开始
Q=a
- 然后转到下一个键,
Q=Q[x]
(现在实际上是Q==a[x]
)
- 然后到下一个
Q=Q[y]
(Q==a[x][y]
)
- 依此类推,直到到达最后一个键,
z
(Q==a[x][y][z]
)
代码:
函数更新数据(dataObj){
var nameSplit=dataObj.split(“.”),
uls=document.createElement(“ul”);
//从根对象开始,跟随每个给定的键
var final=stateObj;
对于(变量i=0;iPrenom:+final[i][“Prenom”]+“Nom:+final[i][“Nom”]+”电话:“+final[i][“Tel”]+”邮件:“+final[i][“Mail”+”本地化:“+i+””
}
contentElement.appendChild(uls)
}
编辑:在重新提出问题后,您使问题更加清晰。您需要一种将字符串“a[x][y][z]”
转换为它所指向的实际对象的方法
不建议使用eval,您可以做的是:
- 从对象开始
Q=a
- 然后转到下一个键,
Q=Q[x]
(现在实际上是Q==a[x]
)
- 然后到下一个
Q=Q[y]
(Q==a[x][y]
)
- 依此类推,直到到达最后一个键,
z
(Q==a[x][y][z]
)
代码:
函数更新数据(dataObj){
var nameSplit=dataObj.split(“.”),
uls=document.createElement(“ul”);
//从根对象开始,跟随每个给定的键
var final=stateObj;
对于(变量i=0;iPrenom:+final[i][“Prenom”]+“Nom:+final[i][“Nom”]+”电话:“+final[i][“Tel”]+”邮件:“+final[i][“Mail”+”本地化:“+i+””
}
contentElement.appendChild(uls)
}
不需要toString()
。final
变量已经是String
@Cristy,但是当我为(vari in final){console.log(stateObj[“content”][“adminificheers”][“aPropos”][“administ”)执行操作时
function updatedata (dataObj){
var nameSplit = dataObj.split("."),
uls = document.createElement("ul");
// Start from the root object, follow each given key
var final = stateObj;
for(var i = 0; i < nameSplit.length; ++i) {
var key = nameSplit[i];
final = final[key];
}
for(var i in final){
// This next part is wrong, your final Array is an one dimensional String array
// Accessing anything in the form of final[i][X] will not yield the result you are looking for
// What are you trying to output?
uls.innerHTML += "<li class='col-3 inline-block card aliceblue fadeIn'><div>Prenom: "+final[i]["prenom"]+"</div><div>Nom: "+final[i]["nom"]+"</div><div>Tel: "+final[i]["tel"]+"</div><div>Mail: "+final[i]["mail"]+"</div><div> Localisation: "+i+"</div></li>"
}
contentElement.appendChild(uls)
}