Я пытаюсь сделать формат данных, как показано ниже. для использования модуля 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));
Может кто-нибудь мне помочь?
Вы смешиваете разные методы для формирования json для jsTree.
Вы либо 1) используете многоуровневую структуру, используя ключ children
— у вас есть, что в начале вашего результата json, или 2) вы используете одноуровневую структуру, не используйте children
Ключевое слово, просто укажите родительский узел. Я предлагаю вам использовать второй способ.
Вместо parent_id
ты должен просто использовать parent
,
Ваш вывод json содержит повторяющиеся записи с идентификаторами «1», «3», «9». Это не хорошо.
Для использования корневого узла #
как идентификатор
Для меня ваша цель JSON должна выглядеть следующим образом. Чтобы получить его, правильный фрагмент итерации php, вероятно, будет выглядеть примерно так, как показано ниже, но вам придется специально отфильтровать дублирующиеся записи, которых пока нет в коде.
Тогда вы получите ожидаемый результат, как в этой демонстрации — скрипка.
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 ссылка
Других решений пока нет …