0

我尝试创建一个有效的 json-object 结构来创建一个定义列表。看看我在这里尝试做什么: jsfiddle

var x =
[{
    "dl":
    {
        "dt":"head 1"
        {
            "dd":
            [
                "listitem 1",
                "listitem 1",
                "listitem 1",
                "listitem 1",
                "listitem 1"
            ]
        },
       "dt":"head 2"
        {
            "dd":
            [
                "listitem 2",
                "listitem 2"
            ]
        }
    }      
}]
;

通过执行这个 JS 片段,我尝试从 JSON 对象创建标记:

$.each(x["dl"], function(i,v){
    console.log(this.dt, this.dd);
});

使用变量 x 我尝试创建以下标记:

<dl>
    <dt>head 1</dt>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>

    <dt>head 2</dt>
    <dd>listitem 2</dd>
    <dd>listitem 2</dd>   
</dl>

<dl>
    <dt>head 1</dt>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>
    <dd>listitem 1</dd>

    <dt>head 2</dt>
    <dd>listitem 2</dd>
    <dd>listitem 2</dd>   
</dl>

标记是我需要创建的。我的 JSON 结构做错了什么?

4

1 回答 1

3

首先,这不是JSON。这只是一个 JavaScript 对象。JSON 是JavaScript 对象的字符串表示形式。

其次,您的对象不正确。你不能有多个dt属性,我建议把它做成一个数组。 "dt":"head 1" {无效。此外,x应该是一个对象,而不是一个(对象的)数组。

我建议让你的对象是这样的:

var x = {
    "dl": [{
        "dt": "head 1",
        "dd": ["listitem 1", "listitem 1", "listitem 1", "listitem 1", "listitem 1"]
    }, {
        "dt": "head 2",
        "dd": ["listitem 2", "listitem 2"]
    }]
};

x是一个包含dl属性的对象。 x.dl是一个包含对象的数组。这些对象包含dtdd属性。

现在您的代码段将正常工作:

$.each(x["dl"], function(i,v){ // you can also use "x.dl"
    console.log(this.dt, this.dd);
});

从这个对象很容易制作你想要的 HTML。

于 2012-04-19T20:08:19.130 回答