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

时间:2016-06-12 13:11:33

标签: javascript json

我有一个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)
    }

这是 console.log(最终);

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

这是我最后得到的

enter image description here

为什么我到处都取消定义?

当我做的时候

for(var i in final){console.log(stateObj["content"]["AdminFichiers"]["aPropos"]["administrate‌​urs"]); }

它将结果显示为对象。

我该怎么办

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

on object

3 个答案:

答案 0 :(得分:2)

编辑:在重新回答问题后,您更清楚了。您想要一种方法将字符串"a[x][y][z]"转换为它指向的实际Object

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

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

代码:

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

答案 1 :(得分:1)

它的发生是因为当您在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) } 函数即可使您的函数正常工作。

使用此代码:

{{1}}

希望它适合你:)

以下是Image showing the connections of the ButtonBarView and UIScrollView

答案 2 :(得分:1)

因为您尝试访问没有的对象属性。您的 final [i] 将从您上面打印的最终字符串中返回第i个位置的字符。 final [i] 将返回一个字符,而不是一个对象。所以你不可能最终获得像 final [i] [&#34; prenom&#34;]

这样的价值