javascript - 如何将json解析成嵌套的html列表结构

标签 javascript jquery json

我用 xml 试过了,但是从 firefox 到 IE 的行为很奇怪。 我以前没有使用过 json,所以任何帮助将不胜感激。

这是我的 json:

{
   "storeList":{
      "state":[
         {
            "stateName":"Maine",
            "store":[
               {
                  "storeName":"Store 1",
                  "storeID":"store1",
                  "storeURL":"http:\/\/www.sitename.com"
               },
               {
                  "storeName":"Store 2",
                  "storeID":"store2",
                  "storeURL":"http:\/\/www.sitename.com"
               },
               {
                  "storeName":"Store 3",
                  "storeID":"store3",
                  "storeURL":"http:\/\/www.sitename.com"
               }
            ]
         },
         {
            "stateName":"Connecticut",
            "store":[
               {
                  "storeName":"Store 1",
                  "storeID":"store1",
                  "storeURL":"http:\/\/www.sitename.com"
               }
            ]
         }
      ]
   }
}

以及我想要的结构 -

<div id="storeList">
    <ul>
       <li>
          <h3>State Name 1</h3>
          <a href="storeurl" id="storeid">storename</a>
          <a href="storeurl" id="storeid">storename</a>
       </li>
       <li>
          <h3>State Name 2</h3>
          <a href="storeurl" id="storeid">storename</a>
       </li>
    </ul>
</div>

更新

尝试了下面的解决方案,从外部文件加载 json,但我得到一个错误,指出对象未定义:

$(document).ready(function() {
                    var object;
                    $.getJSON('xml/storeList.json', function(json) {
                      object = json;
                    });


                    $('#storeList').append('<ul/>')
                    $.each(object.storeList.state, function() {
                        var list = $('#storeList ul'),
                        listItem = $('<li/>'),
                        html = listItem.append($('<h3/>').text(this.stateName));

                        $.each(this.store, function() {
                        listItem.append($('<a />').attr('href', this.storeURL).text(this.storeName));
                        });

                        list.append(html)
                    });
                    });

最佳答案

我会使用模板引擎。使用模板引擎,您可以像这样定义模板(易于阅读和维护):

<script id="template" type="text/x-jquery-tmpl">
    <ul>
        {{#each state}}
        <li>
            <h3>{{=stateName}}</h3>
            {{#each store}}
            <a href="{{=storeURL}}" id="{{=storeID}}">{{=storeName}}</a>
            {{/each}}
       </li>
       {{/each}}
    </ul>
</script>

然后简单地调用

$("#storeList").html(
    $("#template").render(json.storeList)
);

填充你的div

<div id="storeList"></div>

我有一个 demo ready .我这里使用的模板引擎是JsRender .

关于javascript - 如何将json解析成嵌套的html列表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434579/

相关文章:

javascript - 从循环创建的表中提取数据 (PHP)

javascript - 如何从网页上的 javascript 文件中删除 html 标签?

javascript - jQuery DataTable - 如何在不创建新 DataTable 对象的情况下设置 aoColumnDefs?

javascript - jQuery SubmitHandler 提示加载微调器

json - Go 中严格的 JSON 解析

javascript - 如何检查和测试 JavaScript 应用程序泄漏了多少内存

javascript - Require.js 和 r.js 包括所有依赖项,甚至是子模块的依赖项

javascript - 如何从 Angular 中的 $q.defer().promise 返回集合?

json - 使用结构字段(不是 json 键)将结构写入 Json 文件

ios - 如何提取JSON数组?