0

I have a list of objects with a C_PARENT field.This parent field references another object in the list. I would like to create a tree hierarchy from this list based on this field.

Here is my data.

[{
    "C_ID" : 1.0,
    "C_TITLE" : "Sparklers",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 2.0,
    "C_TITLE" : "Twinklers",
    "C_PARENT" : 0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 3.0,
    "C_TITLE" : "Candles",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 4.0,
    "C_TITLE" : "Chakkars",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 5.0,
    "C_TITLE" : "Colour Chakkars",
    "C_PARENT" : 4.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 6.0,
    "C_TITLE" : "Fancy Chakkars",
    "C_PARENT" : 4.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 7.0,
    "C_TITLE" : "Fountains",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 8.0,
    "C_TITLE" : "Whistling Fountains",
    "C_PARENT" : 7.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 9.0,
    "C_TITLE" : "Fancy Fountains",
    "C_PARENT" : 7.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 10.0,
    "C_TITLE" : "Fancy Colour Fountains",
    "C_PARENT" : 7.0,
    "C_STATUS" : "Active"
},

{
    "C_ID" : 11.0,
    "C_TITLE" : "Rockets",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
}]

I need convert into tree structure.

[
  {
    'C_ID': 1,
    'C_TITLE': 'Sparklers',
    'C_PARENT': 0,
    'C_STATUS':'Active'
  },
  {
    "C_ID" : 2.0,
    "C_TITLE" : "Twinklers",
    "C_PARENT" : 0,
    "C_STATUS" : "Active"
  },
  {
    "C_ID" : 3.0,
    "C_TITLE" : "Candles",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
  }
  {
    '"C_ID" : 4.0,
    "C_TITLE" : "Chakkars",
    "C_PARENT" : 0.0,
    "C_STATUS" : "Active"
    children:  [
      {
        "C_ID" : 5.0,
        "C_TITLE" : "Colour Chakkars",
        "C_PARENT" : 4.0,
        "C_STATUS" : "Active"
      },
      {
        "C_ID" : 6.0,
        "C_TITLE" : "Fancy Chakkars",
        "C_PARENT" : 4.0,
        "C_STATUS" : "Active"
      }
    ]
]

I have no idea.

Kindly advice me,

Thanks

4
  • is your data is an array of objects? Commented Jul 5, 2017 at 7:02
  • Thanks for ur reply.Ya my data is array of objects Commented Jul 5, 2017 at 7:03
  • Possible duplicate of Build tree array from flat array in javascript Commented Jul 5, 2017 at 7:18
  • @ Tadeáš Peták .I tried but not work. Commented Jul 5, 2017 at 7:36

1 Answer 1

2

I normaly used to create a new string with propertly info

String.prototype.replaceAll = function (search, replacement) {
  return this.replace(new RegExp(search, 'g'), replacement);
};

var data = JSON.parse('[{"C_ID" : 1.0,"C_TITLE" : "Sparklers","C_PARENT" : 0.0, "C_STATUS" : "Active"},{    "C_ID" : 2.0,    "C_TITLE" : "Twinklers",    "C_PARENT" : 0,    "C_STATUS" : "Active"},{   "C_ID" : 3.0,    "C_TITLE" : "Candles",    "C_PARENT" : 0.0,    "C_STATUS" : "Active"},{    "C_ID" : 4.0,    "C_TITLE" : "Chakkars",    "C_PARENT" : 0.0,    "C_STATUS" : "Active"},{    "C_ID" : 5.0,    "C_TITLE" : "Colour Chakkars",    "C_PARENT" : 4.0,    "C_STATUS" : "Active"},{    "C_ID" : 6.0,    "C_TITLE" : "Fancy Chakkars",    "C_PARENT" : 4.0,    "C_STATUS" : "Active"},{    "C_ID" : 7.0,    "C_TITLE" : "Fountains",    "C_PARENT" : 0.0,    "C_STATUS" : "Active"},{    "C_ID" : 8.0,    "C_TITLE" : "Whistling Fountains",    "C_PARENT" : 7.0,    "C_STATUS" : "Active"},{    "C_ID" : 9.0,    "C_TITLE" : "Fancy Fountains",    "C_PARENT" : 7.0,    "C_STATUS" : "Active"},{    "C_ID" : 10.0,    "C_TITLE" : "Fancy Colour Fountains",    "C_PARENT" : 7.0,    "C_STATUS" : "Active"},{    "C_ID" : 11.0,    "C_TITLE" : "Rockets",    "C_PARENT" : 0.0,    "C_STATUS" : "Active"}]');

var result = '[';

for (i = 0; i < data.length; i++) {
  if (data[i].C_PARENT == 0 || data[i].C_PARENT == "0") {
    if (i != 0)
      result += ']},';
    result += '{"C_ID" : ' + data[i].C_ID + ', "C_TITLE" : "' + data[i].C_TITLE + '", "C_PARENT" : ' + data[i].C_PARENT + ', "C_STATUS" : "' + data[i].C_STATUS + '", "children" : [';
  } else {
    result += '{"C_ID" : ' + data[i].C_ID + ', "C_TITLE" : "' + data[i].C_TITLE + '", "C_PARENT" : ' + data[i].C_PARENT + ', "C_STATUS" : "' + data[i].C_STATUS + '"},';
  }
}
result += ']}]';
result = result.replaceAll("},]", "}]");
var a = JSON.parse(result);
document.getElementById('result').innerHTML = result + "<br/><br/><br/>" + a;

https://jsfiddle.net/g9h9a9ep/

Sign up to request clarification or add additional context in comments.

8 Comments

Thanks for a reply.Actually, i am using typescript. I just used this var data = JSON.parse(menu list); I am getting this error Unexpected token o in JSON at position 1
rembember that you can debug it on the Internet Explorer, Firefox or Chrome by pressing 'F12' and going to the third tab you can put breakpoints to your js file press 'F5' to reload and see what is causing this Error, probably is for a bad formatted string or something bad builded
Now I fixed this issue using this line var data=JSON.parse(JSON.stringify(c.json()));I am using typescript.i am getting another error Property 'replaceAll' does not exist on type 'String'.How can i fix this issue?
just add String.prototype.replaceAll = function (search, replacement) { return this.replace(new RegExp(search, 'g'), replacement); }; is an improve of String class
Property 'replaceAll' does not exist on type 'String'.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.