Russell
Russell

Reputation: 1814

Javascript Json formatting

I've a json like below

[
  {
    "name": "Item",
    "attribute_list": [
      {
        "name": "Attribute 1",
        "value_list": [
          {
            "value": "1"
          },
          {
            "value": "2"
          }
        ]
      },
      {
        "name": "Attribute 2",
        "value_list": [
          {
            "value": "10"
          },
          {
            "value": "60"
          },
          {
            "value": "80"
          }
        ]
      }
    ]
  }
]

I want to change format like below

[
  {
    "Item": [{
        "Attribute 1": "1", "Attribute 2": "10"
      }]
  }
]

What I've done already:

results.map(items => {
     data[items.name.toLowerCase().replace(/ /g, '_')] = items.attribute_list?
         items.attribute_list.reduce(
        (obj, item) => Object.assign(obj, { [item.name.toLowerCase().replace(/ /g, '_')]: item.value_list?item.value_list[0].value:null }), {})
        :null
})

Thanks in advance

Upvotes: 1

Views: 54

Answers (1)

Sebastian Kaczmarek
Sebastian Kaczmarek

Reputation: 8515

If I understood everything correctly, you can do it like this:

const input = [
  {
    "name": "Item",
    "attribute_list": [
      {
        "name": "Attribute 1",
        "value_list": [
          {
            "value": "1"
          },
          {
            "value": "2"
          }
        ]
      },
      {
        "name": "Attribute 2",
        "value_list": [
          {
            "value": "10"
          },
          {
            "value": "60"
          },
          {
            "value": "80"
          }
        ]
      }
    ]
  }
];

const result = input.map((entry) => {
  return {
    [entry.name]: [entry.attribute_list.reduce((res, curr) => {
      res[curr.name] = curr.value_list[0].value;
      return res;
    }, {})]
  };
});

console.log(result);

Upvotes: 4

Related Questions