-4

My data is currently stored in this format, stored in a JSON file:

{
    "name": {
        "0": ______,
        "1": ______,
        "2": ______
    },
    "xcoord": {
        "0": ______,
        "1": ______,
        "2": ______
    },
    "ycoord": {
        "0": ______,
        "1": ______,
        "2": ______
    }
}

And I need to convert it into this format, as an array of objects:

[
    {
        "id": 0,
        "name": _____,  
        "xcoord": _____,
        "ycoord": _____
    },
    {
        "id": 1,
        "name": _____,
        "xcoord": _____,
        "ycoord": _____
    },
    {
        "id": 2,
        "name": _____,
        "xcoord": _____,
        "ycoord": _____
    }
]

As you can see, I also need to take the number keys in my first data format and make them the "id" values in my second data format. (Since the position of the object in the array and the id number match up, maybe that would be another way to create the "id" key?) I would then store my second data format into a local variable to use in my JS code.

Any ideas on how I can do this? I'm not very good with restructuring this kind of data.

1
  • 1
    Create an array, then iterate the JSON object and for each sub-property check if there's already an element in the array. If not create it. Then add the parent property with the value. Commented Aug 1, 2016 at 10:01

1 Answer 1

2

This can be done for instance with two imbricated .forEach():

var obj = {
    "name": {
        0: 'name0',
        1: 'name1',
        2: 'name2'
    },
    "xcoord": {
        0: 'xcoord0',
        1: 'xcoord1',
        2: 'xcoord2'
    },
    "ycoord": {
        0: 'ycoord0',
        1: 'ycoord1',
        2: 'ycoord2'
    }
};

var res = [];

Object.keys(obj).forEach(k => {
  Object.keys(obj[k]).forEach(v => {
    (res[v] = (res[v] || { id: v }))[k] = obj[k][v];
  });
});

console.log(res);

Note:

This line ...

(res[v] = (res[v] || { id: v }))[k] = obj[k][v]

... is a short way to do:

if(!res[v]) {
  // if this record doesn't exist yet,
  // create it with its implied 'id' property
  res[v] = { id: v };
}
// add property 'k' to this record
res[v][k] = obj[k][v];
Sign up to request clarification or add additional context in comments.

Comments

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.