2014-12-15 2 views
1

json 객체에 대한 계층 적 목록을 직렬화하려고합니다.중첩 목록 'ol'요소 위로 루프

[ 
    {title: title1,id: 1,children: [ 
       {title: title1_1,id: 1_1,children: [ 
        {title: title1_1_1,id: 1_1_1,children: []}, 
        {title: title1_1_2,id: 1_1_2,children: []} 
       ]} 
    ]}, 
    {title: title2,id: 2,children: [ 
     {title: title2_1,id: 2_2,children: []} 
    ]} 
] 

내리스트 구조는 다음과 같이 진행됩니다

function toJson(object, jsonObject) { 
    return jsonObject 
      + "{\"title\":\"" 
      + object.children('label').text() 
      + "\", \"children\":\"" 
      + listToJson(object.children("ol").children("li"),jsonObject) 
      + "\"}"; 
} 

function listToJson(list,jsonObject) { 
    jsonObject = jsonObject + "["; 
    list.each(function(idx, li) { 
     jsonObject = toJson($(li).children('ol'),jsonObject); 
    }); 
    jsonObject = jsonObject + "]"; 
    return jsonObject; 
} 

및 excecution 기능 :

var jsonObject = ""; 
    jsonObject = listToJson($("ol.sortable > li"),jsonObject); 

하지만

<ol class="sortable"> 
    <li><label>title1</label> 
     <ol> 
      <li><label>title1_1</label> 
       <ol> 
        <li><label>title1_1_1</label> 
         <ol></ol> 
        </li> 
        <li><label>title1_1_2</label> 
         <ol></ol> 
        </li> 
       </ol> 
      </li> 
     </ol> 
    </li> 
    <li><label>title2</label> 
     <ol> 
      <li><label>title2_1</label> 
       <ol></ol> 
      </li> 
     </ol> 
    </li> 
</ol> 

나는 내 직렬화 기능을 작성했습니다 위선적 인 말로하면 효과가있다. 나는 그것이 .children(ol)에게 전화 할 때 첫번째 수준에 그 대신에 전체의 구조를 쓰러 뜨리는 원인이다라고 생각한다.

아무도 도와 줄 수 있습니까?

+0

은 왜 JSON 예제의 일부 어린이 다차원 배열과 약간의 단일 차원 배열인가? –

+0

내 복사/붙여 넣기 실수였습니다. 나는 그것을 바로 잡았다. 당신은 지금 그것을 볼 수 있습니까? – masterdany88

답변

1

수동으로 JSON을 작성한 이유가 확실하지 않지만 그렇게하지 않는 것이 좋습니다.

자바 스크립트

$(document).ready(function() 
{ 
    function toObject(element) 
    { 
     var result = []; 
     // make sure we're using jquery elements 
     var $element = $(element); 
     var $children = $element.children('li'); 
     $children.each(function() 
     { 
      var $this = $(this); 
      var item = {}; 
      item.title = ''; 

      var $label = $this.find('label').first(); 
      if ($label.length == 1) 
      { 
       item.title = $label.text(); 
      } 

      // should only be one OL 
      var $grandchild = $this.children('ol').first(); 

      item.children = toObject($grandchild); 

      result.push(item); 
     }); 

     return result; 
    } 

    var $target = $('ol.sortable'); 
    var o = toObject($target); 
    var json = JSON.stringify(o); 

    $('pre').text(json); 
}); 

결과 (어쨌든 훨씬 더 JSON) :

[{ "제목": "FAZA의 przygotowawcza", "어린이": [{ "여기 많이 단순화 뭔가 제목 ":"어린이 ":"어린이 ":"어린이 ":"어린이 ":"어린이 ":" ] {} "}"} "}"{title ":"Faza realizacji ","children ": [{"title ":"Wprowadź klienta do systemu ","children ": []}]}]

ID를 추가하지 않았지만 정말로 필요한 경우이 코드에 추가하기가 어렵지 않다는 사실을 알려주세요.

JSFiddle Example

+0

유망 해 보입니다. 나는 집에 도착하자마자 10 시간 만에 그것을 점검 할 것이다. 그런데, id, type, active, icon 등의 추가 매개 변수를 추가해야합니다. Fe :'

  • ' – masterdany88

    +0

    구조, 레이블, 사용자 지정 특성 값을 편집하는 것이 가장 중요합니다. 따라서 serialize하기 전에 전체 목록을 새로 고쳐야합니다. 여기 내 포크입니다 : http://jsfiddle.net/g6x5ed0m/13/ – masterdany88

    +0

    매력처럼 작동합니다. 감사. – masterdany88