首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在函数中运行json绝对路径

如何在函数中运行json绝对路径
EN

Stack Overflow用户
提问于 2016-06-12 13:11:33
回答 3查看 205关注 0票数 0

我有一个JSON对象

代码语言:javascript
复制
stateObj:{
    template: {
              cache:false,
              ref :"templates/pages/menu",
              searchability: true,
              path: "content.AdminFichiers.aPropos.administrateurs",
              lastUpdate: "Dernières mises à jour"
          }
}

我这样叫它

代码语言:javascript
复制
updatedata (stateObj.template.path);

更新容器的函数如下所示

代码语言:javascript
复制
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)
    }

这是console.log(final);

代码语言:javascript
复制
stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]

这是我最后得到的

为什么我到处都搞不清楚?

当我这么做

代码语言:javascript
复制
for(var i in final){console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrate‌​urs"]); }

它将结果显示为对象。

我怎么跑?

stateObj["content"]["AdminFichiers"]["aPropos"]["administrateurs"]

论客体

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-12 13:29:56

编辑:在重新渲染问题之后,使问题变得更清楚了。您需要一种将字符串"a[x][y][z]"转换为它所指向的实际Object的方法。

不建议使用eval,您可以做的是:

  • 从对象Q = a开始
  • 然后转到下一个键,Q = Q[x] (现在实际上是Q == a[x])
  • 然后转到下一个Q = Q[y] (Q == a[x][y])
  • 等等,直到你到达最后一个键,z (Q == a[x][y][z])

代码:

代码语言:javascript
复制
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)
}
票数 2
EN

Stack Overflow用户

发布于 2016-06-12 13:23:03

因为您正在尝试访问一个没有对象属性的对象属性。您的finali将返回‘I’位置的一个字符,从上面打印的最后一个字符串开始。finali将返回一个字符,而不是一个对象。所以你不可能得到像finali这样的值

票数 2
EN

Stack Overflow用户

发布于 2016-06-12 13:22:38

之所以会发生这种情况,是因为当您在for-in循环中拆分nameSplit时,每个字母都对应于每个字符串。所以,只需使用toString()函数来使您的函数工作。

使用以下代码:

代码语言:javascript
复制
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)
}

希望它对你有用:)

这是jsFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37774641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档