Javascript 如何在函数中运行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

我有一个JSON对象

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"]["administrate‌​urs"]); }
它将结果显示为对象

我怎么跑

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)
    }