2017-01-09 3 views
0

peut fpjson gérer la charge et enregistrer de la structure suivante de/vers JSON:freepascal: JSON et structure de données récursive

PTreeStructure = ^TTreeStructure; 
TTreeStructure = class 
    name: string; 
    value: Integer; 
    items: array of PTreeStructure; 
end; 

Merci!

+0

Cela ne ressemble pas à votre type réel. Sûrement c'est 'record' plutôt que' class'. –

+0

est-ce important? Je viens de simplifier la structure pour montrer le point clé qui est items: array of PTreeStructure; – xrfang

+0

Une classe est un type de référence qui doit être instancié par un constructeur. Un enregistrement est un type de valeur qui peut être alloué automatiquement. J'aurais pensé que c'était important. Quoi qu'il en soit, si vous devez utiliser une classe, que ce soit. Mais dans ce cas, je suis surpris que l'utilisation utilise 'PTreeStructure =^TTreeStructure' parce que c'est un pointeur vers un pointeur. Comment cela va-t-il être réparti? –

Répondre

0

FCL-JSON peut stocker des données imbriquées (un objet peut avoir un tableau d'objets, ce qui peut avoir un tableau d'objets, voir les exemples fournis)

Mais cette façon vous stocker les objets eux-mêmes, et non les références , ce qui est bien pour un arbre, mais pas pour les structures cyclables.

Un DAG peut être représenté en stockant un tableau plat avec toutes les données, mais stocker des éléments avec des index ou une forme d'ID unique par enregistrement dans le tableau au lieu de pointeurs.

Si votre racine n'est pas le premier élément, vous devez stocker en plus l'indice/iD de la racine quelque part

+0

merci, il semble que je ferais mieux d'utiliser fpjson et faire le chargement/enregistrer moi-même. – xrfang