使用angularjs访问复杂的json文件

时间:2015-09-01 17:25:28

标签: json angularjs

我一直在使用json文件和angularjs,因为我对json文件进行了更改以使其更完整的信息,文件的结构变得更加复杂,现在我无法以他们的方式访问数据我曾经。它应该是相同的方式,但它没有加载。

这是杰森:http://www.jsoneditoronline.org/?id=72e10a49f6f7650a864dda13a3f2d56a, (注意:estado =州,localidad =位置我试图在所选的选择中显示各种州的位置。)

我如何将json数据加载到html中:

<select class="control-group chosen-select" chosen id='sl_edo'  style="width:300px;">
  <!-- also i tried ng-repeat="pueblo in pueblos" which worked with the old json file-->
        <optgroup ng-repeat="pueblo in pueblos[0] | orderBy:'estado'" label={{pueblo.estado}}>
          <option>{{pueblo.localidad}}</option>

        </optgroup>

  </select>

我做了一些测试来检查数据结构如何

 <p>{{pueblos[0].estado}}</p>

这一行给我带来了这个

  

[{&#34;哈利斯科&#34; {&#34; localidad&#34; {&#34;龙舌兰&#34;:,等...

我测试的另一条html线

<p>{{pueblos[0]}}</p>
  

{&#34;埃斯塔&#34;:[{&#34;哈利斯科&#34; {&#34; localidad&#34; {&#34;龙舌兰&#34;

1 个答案:

答案 0 :(得分:2)

您的数据结构有点偏差。您希望类似对象具有相同的结构。例如,现在,访问&#34; Jalisco&#34;对象,您必须致电pueblos[0].estado[0].Jaliscopueblos[0].estado[0]["Jalisco"]。但是,如果您尝试pueblos[0].estado[1].Jalisco,则会收到错误,因为estado[1]只有#34; Sonora&#34;作为一个属性。相反,你可能想要这样的结构:

estados = [
    {
        "nombre": "Jalisco",
        "localidades": [
            {
                "nombre": "Tequila",
                "oferta": {
                    "gen": 99,
                    "ecas": 66,
                },
            },
        ],
    }
]

在此结构中,您可以通过estado[#idx].nombre访问州名称。然后,如果你想要这个州的地方性,那就是estado[#idx].localidades[#idx]。所以如果你想要&#34; gen&#34; &#34; oferta&#34;的属性在龙舌兰酒中,您可以像estados[0].localidades[0].oferta.gen一样访问它。基本上,如果您正在使用使用ng-repeat循环的列表,则所有对象应共享相同的属性名称。你永远不应该使用不同的名称作为属性名称,例如使用&#34; Jalisco&#34;或&#34;索诺拉&#34;作为属性。