Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7958895
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 4, 20262026-06-04T04:29:24+00:00 2026-06-04T04:29:24+00:00

Let’s say I have table/list like this n=3 in this case, but n can

  • 0

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

  • Toyota, Gas, Compact, Camry

  • Toyota, Hybrid, Compact, Prius

  • Honda, Gas, Compact, Civic

  • If needed I can REFORMAT THE DATA into two tables

    parentId parText answerId

  • 1 Toyota 1

  • 1 Toyota 2

  • 1 Toyota 3

  • 2 Honda 4

  • answerId level answerTextid answerText

  • 1 1 1 Gas

  • 1 2 2 Compact

  • 1 3 3 Corolla

  • 2 1 1 Gas

  • 2 2 2 Compact

  • 2 3 4 Camry

  • …

    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"}]}
    
    • 1 1 Answer
    • 0 Views
    • 0 Followers
    • 0
    Share
    • Facebook
    • Report

    Leave an answer
    Cancel reply

    You must login to add an answer.

    Forgot Password?

    Need An Account, Sign Up Here

    1 Answer

    • Voted
    • Oldest
    • Recent
    • Random
    1. Editorial Team
      Editorial Team
      2026-06-04T04:29:24+00:00Added an answer on June 4, 2026 at 4:29 am

      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:

      public class Test { 
      
          public static void main(String[] args) 
          {
              // hierarchical data in a flattened list
              String[][] data = {
                      {"Toyota", "Gas", "Compact", "Corolla"},
                      {"Toyota", "Gas", "Compact", "Camry"},
                      {"Toyota", "Hybrid", "Compact", "Prius"},
                      {"Honda", "Gas", "Compact", "Civic"}
              };
      
              TreeManager treeManager = new TreeManager();
      
              for(String[] row : data)
              {
                  // build the path to our items in the tree
                  List<String> path = new ArrayList<String>();
                  for(String item : row)
                  {
                      // add this item to our path
                      path.add(item);
                      // will add it unless an Item with this name already exists at this path
                      treeManager.addData(treeManager, path);
                  }
              }
      
              treeManager.getData(data[0]).putValue("MPG", 38);
              treeManager.getData(data[1]).putValue("MPG", 28);
      
              Gson gson = new Gson();
      
              System.out.println(gson.toJson(treeManager));
          }
      
          /**
           * This base class provides the hierarchical property of
           * an object that contains a Map of child objects of the same type.
           * It also has a field - Name
           *
           */
          public static abstract class TreeItem implements Iterable<TreeItem>{
      
              private Map<String, TreeItem> children;     
              private String name;
      
              public TreeItem() {
                  children = new HashMap<String, TreeItem>();
              }
      
              public String getName() {
                  return name;
              }
      
              public void setName(String name) {
                  this.name = name;
              }
      
              public void addChild(String key, TreeItem data) 
              {           
                  children.put(key, data);
              }
      
              public TreeItem getChild(String key) 
              {           
                  return children.get(key);
              }
      
              public boolean hasChild(String key) 
              {           
                  return children.containsKey(key);
              }
      
              @Override
              public Iterator<TreeItem> iterator() {          
                  return children.values().iterator();
              }           
          }
      
          /**
           * This is our special case, root node. It is a TreeItem in itself
           * but contains methods for building and retrieving items from our tree
           *
           */
          public static class TreeManager extends TreeItem
          {       
              /**
               * Will add an Item to the tree at the specified path with the value
               * equal to the last item in the path, unless that Item already exists 
               */
              public void addData(List<String> path)
              {
                  addData(this, path);
              }
      
              private void addData(TreeItem parent, List<String> path)
              {
                  // if we're at the end of the path - create a node
                  String data = path.get(0);
                  if(path.size() == 1)
                  {
                      // unless there is already a node with this name
                      if(!parent.hasChild(data))
                      {
                          Group group = new Group();
                          group.setName(data);
                          parent.addChild(data, group);
                      }
                  }
                  else
                  {
                      // pass the tail of this path down to the next level in the hierarchy
                      addData(parent.getChild(data), path.subList(1, path.size()));
                  }
              }
      
              public Group getData(String[] path)
              {
                  return (Group) getData(this, Arrays.asList(path));
              }
      
              public Group getData(List<String> path)
              {
                  return (Group) getData(this, path);
              }
      
              private TreeItem getData(TreeItem parent, List<String> path)
              {
                  if(parent == null || path.size() == 0)
                  {
                      throw new IllegalArgumentException("Invalid path specified in getData, remainder: " 
                              + Arrays.toString(path.toArray()));
                  }
                  String data = path.get(0);
                  if(path.size() == 1)
                  {
                      return parent.getChild(data);
                  }
                  else
                  {
                      // pass the tail of this path down to the next level in the hierarchy
                      return getData(parent.getChild(data), path.subList(1, path.size()));
                  }
              }
          }
      
          public static class Group extends TreeItem {
      
              private Map<String, Object> properties;
      
              public Object getValue(Object key) {
                  return properties.get(key);
              }
      
              public Object putValue(String key, Object value) {
                  return properties.put(key, value);
              }
      
              public Group () {
                  super();
                  properties = new HashMap<String, Object>();
              }       
          }
      }
      

      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 .

      • 0
      • Reply
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report

    Sidebar

    Related Questions

    Let's say I have a table like this: name | score_a | score_b -----+---------+--------
    Let's say I have a table Foo . This table has the columns ID
    Let's say I have a table like: Persons FirstName varchar(50) LastName varchar(50) EmailAddress varchar(200)
    Let's say I have a query like this: SELECT * FROM table_name WHERE venue
    Let's say I have a list of names in an Access table. I add
    Let's say I have data structures that're something like this: Public Class AttendenceRecord Public
    Let's say I have a table people and a table pets and I'd like
    Let's say I have a table that represents a super class, students . And
    Let's say I have a table tbl with columns id and title . I
    Let's say you have a table for branches in your organization. Some of them

    Explore

    • Home
    • Add group
    • Groups page
    • Communities
    • Questions
      • New Questions
      • Trending Questions
      • Must read Questions
      • Hot Questions
    • Polls
    • Tags
    • Badges
    • Users
    • Help
    • SEARCH

    Footer

    © 2021 The Archive Base. All Rights Reserved
    With Love by The Archive Base

    Insert/edit link

    Enter the destination URL

    Or link to existing content

      No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.