2016-08-04 27 views
0

JSON I durch Serialisierung Wrapper-Klasse Liste bekam:Javascript - hierarchische JSON von JSON konvertiert von Wrapper-Klasse Liste in Apex

{ 
"tree": [{ 
    "Id": "1", 
    "Children": ["2", "3"] 
}, { 
    "Id": "2", 
    "Children": [] 
}, { 
    "Id": "3", 
    "Children": [] 
}, { 
    "Id": "4", 
    "Children": ["1"] 
}, { 
    "Id": "5", 
    "Children": ["4", "6"] 
}, { 
    "Id": "6", 
    "Children": [] 
}] 

}

Formatiert JSON ich in hierarchischer Form benötigen:

{ 
"tree": [{ 
    "Id": "5", 
    "Children": [{ 
     "Id": "4", 
     "Children": [{ 
      "Id": "1", 
      "Children": [{ 
       "Id": "2", 
       "Children": [] 
      }, { 
       "Id": "3", 
       "Children": [] 
      }] 
     }] 
    }, { 
     "Id": "6", 
     "Children": [] 
    }] 
}] 

}

Ich brauche diese hierarchische Form von JSON, um den Baum anzuzeigen Struktur auf der Visualforce-Seite bis zur n-ten Ebene.

+1

Also mit den Kindern müssen Sie eine rekursive Funktion erstellen. Dies ist kein Code-Schreibdienst. Sie müssen angeben, woran Sie hängen bleiben. –

+0

Ich habe bereits am statischen Teil von JSON im Format gearbeitet, was ich versuche zu bekommen. und meine Funktion arbeitet bis zur n-ten Ebene einwandfrei. Aber woran ich festhalte, ist das Format, das ich dynamisch vom Controller –

+0

erhalte. Also muss ich den JSON nur in hierarchischer Form durch JavaScript-Funktion formatieren –

Antwort

0

Dies ist die Lösung für dieses Problem, es wird dieses JSON im hierarchischen Format formatieren.

function convert(array) 
{ 

var map = {} 
for(var i = 0; i < array.length; i++) 
{ 
    var obj = array[i] 
    if(!(obj.Id in map)) 
    { 
     map[obj.Id] = obj 
     map[obj.Id].children = [] 
    } 

    if(typeof map[obj.Id].parent == 'undefined') 
    { 
     map[obj.Id].Id = obj.Id 
     map[obj.Id].parent= obj.parent 
    } 

    var parent = obj.parent || ' '; 
    if(!(parent in map)) 
    { 
     map[parent] = {} 
     map[parent].children = [] 
    } 

    map[parent].children.push(map[obj.Id]) 
} 
return map[' '] 
}