user2062455
user2062455

Reputation: 421

convert JSON object to a different one

i have this json:

 [
  {
    "AF28110": 33456.75,
    "AF27989": 13297.26
  }
]

and i want to convert it to:

[ 
 { "name": "AF28110", "price": 33456.75},
 { "name": "AF27989", "price": 13297.26}
]

I have tried various making it with .map() but i cannot make it work.

does anyone have any idea how to do this? thank you

Upvotes: 0

Views: 78

Answers (6)

Rohìt Jíndal
Rohìt Jíndal

Reputation: 27192

Ways to achieve :

  • Using Object.keys method :

var jsonObj = [
  {
    "AF28110": 33456.75,
    "AF27989": 13297.26
  }
];

var res = Object.keys(jsonObj[0]).map(item => {
  return {"name": item, "price": jsonObj[0][item] };
});

console.log(res);

  • Using Object.getOwnPropertyNames method :

var jsonObj = [
  {
    "AF28110": 33456.75,
    "AF27989": 13297.26
  }
];

var res = Object.getOwnPropertyNames(jsonObj[0]).map(item => {
  return {"name": item, "price": jsonObj[0][item] };
});

console.log(res);

Upvotes: 0

Zied Chouk
Zied Chouk

Reputation: 21

Try this,

var text = '[{"AF28110": 33456.75,"AF27989": 13297.26}]';
var obj = JSON.parse(text);
var result = [];
for (i = 0; i < obj.length; i++) {
 var keys = Object.keys(obj[i]);
 for (j = 0; j < keys.length; j++){
    result[j] = '{ "name":' +keys[j] + ', "price":' + obj[i][keys[j]]+'}';
 } 
}
console.log(result);

Thanks.

Upvotes: 0

Eddie
Eddie

Reputation: 26844

If you have multiple objects on the array, you can use reduce

let arr = [
  {"AF28110": 33456.75,"AF27989": 13297.26},
  {"AF28111": 33456.20,"AF27984": 13297.88}
];

let result = arr.reduce((c, v) => c.concat(Object.entries(v).map(o => {return {name: o[0],price: o[1]}})), []);

console.log(result);

Upvotes: 2

CRice
CRice

Reputation: 32146

Here's a way using concat, Object.keys, and map. You can take each item from the array, get the keys from that object, and then map each key to the name/price object you want. Do that for each item, then flatten the result (using concat).

Example:

const arr = [{
  "AF28110": 33456.75,
  "AF27989": 13297.26
}]

const result = [].concat(...arr.map(o => Object.keys(o).map(k => ({name: k, price: o[k]}))))
console.log(result);

Upvotes: 2

Andy
Andy

Reputation: 63514

Using map:

const data = [
  {
    "AF28110": 33456.75,
    "AF27989": 13297.26
  }
]

const out = Object.keys(data[0]).map(el => {
  return { name: el, price: data[0][el] };
});

console.log(out)

Upvotes: 3

mickl
mickl

Reputation: 49945

You can try following code:

let output = [];
input.forEach(obj => Object.getOwnPropertyNames(obj).forEach(key => output.push({name: key, price: obj[key]})))

Object.getOwnPropertyNames will give you names of your properties and then you can transform each name to a separate output array item.

Upvotes: 5

Related Questions