Let’s say I have table/list like this n=3 in this case, but n can be as unlimited.
groupid answerid1 answerid2 answerid(n)
1 3 6 8
1 3 6 9
1 4 7
2 5
and i want to create a parent/child tree json output like this using java.(I have been using 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}
]
}
]
}
what would be the code/steps to do so. i have looked through lots of tags but mostly people are printing the output and not recursively build a hashmap/ArrayList for GSON to parse adn write to API. one other point each id has other data associated with it that will have to be included in the json output. for instance instead of {groupid:1} would need to this {groupid:1, text=toyota}.
any help is greatly appreciated as i am fairly new to java as i come from SAS background.
I get data like this (just a matrix of list)
Toyota, Gas, Compact, Corolla
If needed I can REFORMAT THE DATA into two tables
parentId parText answerId
answerId level answerTextid answerText
Then I need to make it a tree(nested output like the JSON shows with parent/children – just like if you were creatign a file system directory)
one other thign i would like to do is for each car have mileage as a varialbe ({answerid3:4, text=Corolla, mileage=38}. but also if i traverse up the tree give an average mile for the branch. Like say at branch Toyota, Gas, Compact the mileage would be avg(Camry, Corolla)
the output is a little off, i am looking for something like this. if no children then no children arraylist, and attrbutes are part of one object (hashmap)
{"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"}]}
You should create classes to model your data, in the structure you require. You are basically wanting to build a hierarchical structure from some row based data, this is quite like an XML document, which might be an appropriate solution. But you got me hooked so I played about with what I had before and came up with this:
I think this meets most of the requirements you’ve mentioned so far, although I left out the averaging of the MPG values as an exercise for the reader (I’ve only got so much time…). This solution is very generic – you may want more concrete sub-classes that better describe your data model (like Manufacturer, Type, Model), as you will then be able to hang more useful methods off them (like calculating averages of fields in child objects)
, and you wouldn’t have to deal with the properties as a collection of
Objects, but you then get more complicated code initialising your data structure from the list. Note – this is not production ready code, I’ve just provided it as an example of how you might go about modelling your data in Java.If you are new to not only Java but Object Orientated Programming then you should read up on the subject. The code I have written here is not perfect, I can already see ways it could be improved. Learning to write good quality object orientated code takes time and practice. Read up on Design Patterns and Code Smells .