关于 json 格式 (jstree, php)

about the json format (jstree, php)

我正在尝试制作如下所示的数据格式。使用 jstree 模块

[{
    "id":"1" ,
    "parent_id":"0",
    "text":"TEST",
    "children":[{
        "id":"2",
        "parent_id":"1",
        "text":"TEST1",
        "children":[{
            "id":"4",
            "parent_id":"2",
            "text":"TEST1-1"
        }, {
            "id":"5",
            "parent_id":"2",
            "text":"TEST1-2"        
        }, {
            "id":"6",
            "parent_id":"2",
            "text":"TEST1-3"        
        }]
    },  {
        "id":"3",
        "parent_id":"1",
        "text":"TEST2",
        "children":[{
            "id":"7",
            "parent_id":"3",
            "text":"TEST2-1"
        }, {
            "id":"8",
            "parent_id":"3",
            "text":"TEST2-1"
        }, {
            "id":"9",
            "parent_id":"3",
            "text":"TEST2-1"
        }]
    }]
}]

但是..我的是

[{
    "id":"1" ,
    "parent_id":"0",
    "text":"TEST",
    "children":{
        "id":"3",
        "parent_id":"1",
        "text":"\ud14c\uc2a4\ud2b82",
        "children":{
            "id":"9",
            "parent_id":"3",
            "text":"\ud14c\uc2a4\ud2b82-3"
        }
    }
},{
    "children":{
        "id":"1",
        "parent_id":"0",
        "text":"TEST1",
        "children":{
            "id":"3",
            "parent_id":"1",
            "text":"TEST2",
            "children":{
                "id":"9",
                "parent_id":"3",
                "text":"TEST2-3"
            }
        }
    }
},{
    "id":"2",
    "parent_id":"1",
    "text":"TEST1",
    "children":{
        "id":"6",
        "parent_id":"2",
        "text":"TEST1-3"
    }
},{
    "id":"3",
    "parent_id":"1",
    "text":"TEST2",
    "children":{
        "id":"9",
        "parent_id":"3",
        "text":"TEST2-3"
    }
},{
    "id":"4",
    "parent_id":"2",
    "text":"TEST1-1"
},{
    "id":"5",
    "parent_id":"2",
    "text":"TEST1-2"
},{
    "id":"6",
    "parent_id":"2",
    "text":"TEST1-3"
},{
    "id":"7",
    "parent_id":"3",
    "text":"TEST2-1"
},{
    "id":"8",
    "parent_id":"3",
    "text":"TEST2-2"
},{
    "id":"9",
    "parent_id":"3",
    "text":"TEST2-3"
}]

我不知道数组或 JSON。这是代码:

$refs = array();
$list = array();

$sql = "
select id, parent_id, text
from code
where use_yn = 'Y'
$result = mysql_query($sql);
while($data = mysql_fetch_assoc($result)) {
    $thisref = &$refs[$data['id']];
    $thisref['id'] = $data['id'];
    $thisref['parent_id'] = $data['parent_id'];
    $thisref['text'] = iconv("euc-kr", "utf-8", $data['text']);

    if ($data['id'] == 0) {
        $list[ $data['id'] ] = &$thisref;
    } else {
        $refs[ $data['parent_id'] ]['children'] = &$thisref;
    }
}

echo json_encode(array_values($refs));

谁能帮帮我?

  1. 您正在混合不同的方法来为 jsTree 形成 json。 您要么 1) 使用使用键 children 的多级结构 - 您在结果 json 的开头有它,或者 2) 您使用单级结构,不要使用 children关键字,指定父节点即可。我建议你使用第二种方式。

  2. 而不是 parent_id 你应该简单地使用 parent.

  3. 您的输出 json 包含 ID 为“1”、“3”、“9”的重复条目。不行了。

  4. 对于根节点使用#作为id。

对我来说,您的目标 json 应该如下所示。要获得正确的 php 迭代片段可能看起来更接近于如下所示,但您必须专门过滤掉代码中不存在的重复条目。

然后您将获得本演示中的预期结果 - Fiddle

while($data = mysql_fetch_assoc($result)) {
    $thisref = &$refs[$data['id']];
    $thisref['id'] = $data['id'] == 0 ? '#' : $data['id']; // if id is 0  , it's a root node, replace with '#'
    $thisref['parent'] = $data['parent_id'] == 0 ? '#' : $data['parent_id'];// if parent id is 0, it's a root node, replace with '#'
    $thisref['text'] = iconv("euc-kr", "utf-8", $data['text']);

    $refs[] = &$thisref;        
}

正确json:

var data = [{
    "id": "1",
    "parent": "#",
    "text": "TEST"
}, {
    "id": "3",
    "parent": "1",
    "text": "테스트2"
}, {
    "id": "9",
    "parent": "3",
    "text": "테스트2-3"
}, {
    "id": "2",
    "parent": "1",
    "text": "TEST1"
}, {
    "id": "6",
    "parent": "2",
    "text": "TEST1-3"
}, {
    "id": "4",
    "parent": "2",
    "text": "TEST1-1"
}, {
    "id": "5",
    "parent": "2",
    "text": "TEST1-2"
}, {
    "id": "6",
    "parent": "2",
    "text": "TEST1-3"
}, {
    "id": "7",
    "parent": "3",
    "text": "TEST2-1"
}, {
    "id": "8",
    "parent": "3",
    "text": "TEST2-2"
}]

也可以在 jsTree json reference

查看文档