Ayush Pradhan
Ayush Pradhan

Reputation: 75

Re-ordering of JSON data

I am new to JSON and want to re-structure my JSON response,

JSON-structure now-

{
    "map": {
    "Cityname": "[Jammu, Srinagar]",
    "Pincode": "[180001, 190001]"
     }
}

How I need it to be-

[
  { Cityname: "Jammu", Pincode: 180001},
  { Cityname: "Srinagar", Pincode: 190001}
] 

Is there a way to do so, I searched for some possible solutions but was unable to do so.

Upvotes: 0

Views: 70

Answers (2)

Invizi
Invizi

Reputation: 1298

Here is a Dynamic way of doing so, should work with any json string with the same layout. I fixed some of your json string.

// first we use JSON.parse() to turn a json string into a JS Object.
const data = JSON.parse(`{ "map": { "cityName": ["Jammu", "Srinagar"], "pinCode": [180001, 190001]}}`);

// cities will hold our city objects
const cities = [];

// Object.entries(theObject) returns theObjects keys and values as an array
// EG:
// [[key, value], [key, value]]

// forEach() loops through each key, value pair.
// Because we know that we are going to get a key value pair,
// I destructured the array into it's key and values using:
// [key, values] = [properties];

Object.entries(data.map).forEach((prop) => {
  const [key, values] = prop;
  values.forEach((value, index) => {
    // now we check that the current index is an object.
    // we do this because we can't add a property and value otherwise.
    if(typeof cities[index] != "object"){
      cities[index] = {};
    }
    // now we set the current value
    cities[index][key] = value;
  })
})

console.log(cities);

Upvotes: 1

Thiwanka Wickramage
Thiwanka Wickramage

Reputation: 892

Your JSON response, its not quite logical because there is not mapping between city and pincode. I assumed that cityname and pincode are in the same order in the arrays. I used exact json structure you provided in the question.

You can skip additional steps substring and parse if your json data have correct data types (Cityname string array / Pincode int array).

const json = {
    "map": {
    "Cityname": "[Jammu, Srinagar]",
    "Pincode": "[180001, 190001]"
     }
}

const someFunc = () => {
    let output = [];
  const {Cityname, Pincode} = json.map;
  const citynameArray = (Cityname.substring(1, Cityname.length-1)).split(",");
  const pincodeArray =  JSON.parse(Pincode);
  
    citynameArray.map((v,i) => {
    output.push({Cityname: v, Pincode: pincodeArray[i]})
  });
  return output;
}

console.log(someFunc());

Upvotes: 1

Related Questions