La création d'un arbre à l'aide de json à partir d'une liste/tableau
Disons que j'ai de table/liste comme n=3 dans ce cas, mais n peut être illimité.
groupid answerid1 answerid2 answerid(n)
1 3 6 8
1 3 6 9
1 4 7
2 5
et je veux créer un parent/enfant arbre de sortie json comme ceci en utilisant java.(J'ai été en utilisant GSON)
{
data: [
{
groupid: 1,
children: [
{
answerid1: 1,
children: [
{
answerid2:3,
children: [
{
answerid3:6,
children: [
{answerid4: 8},
{answerid4: 9}
]
}
}, {
answerid2: 4,
children: [
{answerid3:7}
]
}
]
},
{
groupid1: 2,
children: [
{ answerid2: 5}
]
}
]
}
quel serait le code/les étapes pour le faire. j'ai regardé à travers beaucoup de tags, mais surtout des gens de l'impression à la sortie et pas de manière récursive construire une table de hachage/liste de tableaux pour GSON pour analyser l'adn d'écrire à l'API. un autre point chaque id a d'autres données qui y sont associées, qui devront être inclus dans la sortie json. par exemple au lieu de {groupid:1} aurait besoin de cette {groupid:1, text=toyota}.
toute aide est grandement appréciée comme je suis assez nouveau à java, comme je viens de SAS fond.
Je obtenir les données comme ceci (juste une matrice de liste).
Toyota, Gaz, Compact, Corolle
- Toyota, Gaz, Compact, Camry
- Toyota, Hybride, Compact, Prius
- Honda, De Gaz, Compact, Civique
- Si besoin je peux REFORMATER LES DONNÉES dans deux tables
parentId parText answerId
- 1 Toyota 1
- 1 Toyota 2
- 1 Toyota 3
- 2 Honda 4
- answerId niveau answerTextid answerText
- 1 1 1 Gaz
- 1 2 2 Compact
- 1 3 3 Corolle
- 2 1 1 Gaz
- 2 2 2 Compact
- 2 3 4 Camry
- ...Alors j'ai besoin de faire un arbre(nested de sortie comme le JSON montre avec les parents/enfants - tout comme si vous étiez creatign un répertoire système de fichier)
un autre thign j'aimerais faire, c'est pour chaque voiture kilométrage comme une varialbe ({answerid3:4, texte=Corolle, kilométrage=38}. mais aussi si je traverse la hauteur de l'arbre donnent une moyenne de mille pour la branche. Comme, disons, à la direction de Toyota, le Gaz, le Compact le kilométrage serait avg(Camry, Corolla)
la sortie est un peu hors, je suis à la recherche de quelque chose comme cela. si aucun enfant n'a alors pas d'enfants arraylist, et attrbutes font partie d'un objet (table de hachage)
{"data":[{"id":1,"children": [{"id": 2,"children": [{"id": 3 ,"children": [{"id": 4,"name":"Prius"}],"name":"Compact"}],"name":"Hybrid"}, {"id":5,"children": [{"id":3,"children": [{"id":7,"MPG":38, "name":"Corolla"}, {"id":8,"MPG":28,"name":"Camry"}],"name":"Compact"}],"name":"Gas"}],"name":"Toyota"}, {"id":9, "children": [{"id":10,"children": [{"id":3 ,"children": [{"id":11 ,"name":"Civic"}],"name":"Compact"}],"name":"Gas"}],"name":"Honda"}]}
OriginalL'auteur Bob Stein | 2012-05-18
Vous devez vous connecter pour publier un commentaire.
Vous devez créer des classes de modèle de vos données, dans la structure que vous nécessitent. Vous êtes désireux de construire une structure hiérarchique de certaines ligne de base de données, c'est tout à fait comme un document XML, qui peut être une solution appropriée. Mais vous m'a accroché donc j'ai joué avec ce que j'avais avant et est venu avec cette:
Je pense que cela répond à la plupart des exigences que vous avez mentionnés jusqu'à présent, bien que j'ai laissé de côté le calcul de la moyenne de la MPG valeurs comme exercice pour le lecteur (j'ai seulement eu tellement de temps...). Cette solution est très générique, vous pouvez avoir plus de béton des sous-classes qui décrivent mieux à votre modèle de données (comme le Fabricant, le Type, le Modèle), que vous pourrez ensuite accrocher plus utile méthodes hors d'eux (comme le calcul des moyennes des champs dans les objets enfants)
et vous ne voudriez pas avoir à traiter avec les propriétés comme une collection de
Object
s, mais vous obtenez alors plus compliqué code d'initialisation de votre structure de données à partir de la liste. Note - ce n'est pas prêt pour la production de code, j'ai juste fourni un exemple de comment vous pourriez aller sur la modélisation de vos données en Java.Si vous êtes nouveau, non seulement de Java, mais Programmation Orientée Objet alors vous devriez lire sur le sujet. Le code que j'ai écrit ici n'est pas parfait, je peux déjà voir comment il pourrait être amélioré. L'apprentissage de l'écriture de bonne qualité orientée objet code prend du temps et de la pratique. Lire sur Les Modèles De Conception et Odeurs De Code .
sur votre code ci-dessus vous ajoutez à chaque réponse tableau liste mais comment vous parcourez la première "liste" pour obtenir le résultat souhaité? c'est de cette façon que je le fais, où le niveau est le "niveaux" de chaque ligne HashMap map = new HashMap (); for (int i = 0; i < liste.size(); i++){ HashMap item = (HashMap) de la liste.get(i); int levId = (Integer).get("niveaux"); for (int lev = 0; lev < levId ; lev++) {
J'ai mis à jour l'exemple pour vous montrer ce que je veux dire par un résumé super classe. Je pense que ce qui me manque ici est de comprendre comment vos données et comment il est structuré. Vous entrée semble être une liste de groupes qui contiennent une liste de réponses (un seul niveau - Juste une Liste de Listes, mais dans votre sortie JSON vous avez un Groupe avec des niveaux imbriqués de réponses dans les réponses, et je n'arrive pas à voir comment vous êtes désireux de se rendre de l'un à l'autre. Si vous avez plus de détails s'il vous plaît mettre à jour votre question initiale.
j'ai mis à jour un peu plus de détails du problème
merci beaucoup pour l'aide pour l'orienté-objet, lien. mon expericne est principalement visual basic (VBA), SAS, SQL programmation. si jamais vous avez besoin de n'importe quel stat/math, SAS, SQkl aider à me frapper je serai heureux de retourner la faveur.
OriginalL'auteur Malcolm Smith