Chetan Nakum
Chetan Nakum

Reputation: 433

Convert JSON data to array in JavaScript

My json data is like that:

[{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"2UNHFBCQG0"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"J37612ZVEC"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"OB60BC33LF"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"DCA3364SGK"},
{"vehicleType":"car","make":"Volvo","model":"XC60","vin":"FV2HML056G"},
{"vehicleType":"car","make":"BMW","model":"328xi","vin":"IGPP3DQ4SK"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}]

Now I want my array to be like this in JavaScript:

// Javascript array
var array = [];
array[// vin number od above json array] = // the whole row of that vin number.

For example.,

// Javascript array
array["R90N8E95UB"][0] 
=[{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}]
array["R90N8E95UB"][1] 
=[{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}]

And so on...

Please advice on it.

Thank you.

Upvotes: 2

Views: 1277

Answers (9)

Daniel Katz
Daniel Katz

Reputation: 2408

Why don't you simply assign it to something?

var array =    [{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"2UNHFBCQG0"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"J37612ZVEC"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"OB60BC33LF"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"DCA3364SGK"},
{"vehicleType":"car","make":"Volvo","model":"XC60","vin":"FV2HML056G"},
{"vehicleType":"car","make":"BMW","model":"328xi","vin":"IGPP3DQ4SK"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}]

Then

array[0]:
Object {vehicleType: "car", make: "Dodge", model: "Durango", vin: "R90N8E95UB"}

But if you need to lookup a car based on their vin, make the vin the key and the variable needs to be an object, not an array.

var object = {"R90N8E95UB": {"vehicleType": "car", make: "Dodge", model: "Durango"},
              "J5QB24CFGS": {"vehicleType":"car","make":"Mercedes","model":"C250"}}

Upvotes: 1

Walter Palladino
Walter Palladino

Reputation: 479

Your JSON data IS already an array. One way to get the data can be found at Get JavaScript object from array of objects by value or property There you can found a way to query your JSON Array.

Upvotes: 0

jagdish.narkar
jagdish.narkar

Reputation: 317

If you have an object the way you showed, you can get an array by Object.values()

Upvotes: 0

Batman25663
Batman25663

Reputation: 272

Hope this helps :

var arr = {};
var pop = [{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"},{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"2UNHFBCQG0"},{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"J37612ZVEC"},{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"OB60BC33LF"},{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"DCA3364SGK"},{"vehicleType":"car","make":"Volvo","model":"XC60","vin":"FV2HML056G"},{"vehicleType":"car","make":"BMW","model":"328xi","vin":"IGPP3DQ4SK"},{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}];
pop.forEach(function(item){
  if ( arr[item.vin] ) {   
   arr[item.vin].push([item]);
  } else {
    arr[item.vin] = [[item]];
  }
});
console.log(JSON.stringify(arr["R90N8E95UB"][0]));
console.log(JSON.stringify(arr["R90N8E95UB"][1]));
console.log(JSON.stringify(arr));

Upvotes: 2

kind user
kind user

Reputation: 41893

var json = [{vehicleType:"car",make:"Dodge",model:"Durango",vin:"R90N8E95UB"},{vehicleType:"car",make:"Honda",model:"Accord",vin:"XJLSXU6NA5"},{vehicleType:"car",make:"Dodge",model:"Durango",vin:"2UNHFBCQG0"},{vehicleType:"car",make:"Volvo",model:"XC90",vin:"J37612ZVEC"},{vehicleType:"car",make:"Mercedes",model:"C250",vin:"J5QB24CFGS"},{vehicleType:"car",make:"Dodge",model:"Durango",vin:"OB60BC33LF"},{vehicleType:"car",make:"Volvo",model:"XC90",vin:"DCA3364SGK"},{vehicleType:"car",make:"Volvo",model:"XC60",vin:"FV2HML056G"},{vehicleType:"car",make:"BMW",model:"328xi",vin:"IGPP3DQ4SK"},{vehicleType:"car",make:"Mercedes",model:"C250",vin:"J5QB24CFGS"},{vehicleType:"car",make:"Honda",model:"Accord",vin:"XJLSXU6NA5"},{vehicleType:"car",make:"Mercedes",model:"C250",vin:"J5QB24CFGS"},{vehicleType:"car",make:"Dodge",model:"Durango",vin:"R90N8E95UB"}],
    result = [];
 
    json.forEach(v => result.push([v.vin, v]));
    console.log(result);

Upvotes: 5

Nina Scholz
Nina Scholz

Reputation: 386520

You could iterate and push to the inner array.

var data = [{ vehicleType: "car", make: "Dodge", model: "Durango", vin: "R90N8E95UB" }, { vehicleType: "car", make: "Honda", model: "Accord", vin: "XJLSXU6NA5" }, { vehicleType: "car", make: "Dodge", model: "Durango", vin: "2UNHFBCQG0" }, { vehicleType: "car", make: "Volvo", model: "XC90", vin: "J37612ZVEC" }, { vehicleType: "car", make: "Mercedes", model: "C250", vin: "J5QB24CFGS" }, { vehicleType: "car", make: "Dodge", model: "Durango", vin: "OB60BC33LF" }, { vehicleType: "car", make: "Volvo", model: "XC90", vin: "DCA3364SGK" }, { vehicleType: "car", make: "Volvo", model: "XC60", vin: "FV2HML056G" }, { vehicleType: "car", make: "BMW", model: "328xi", vin: "IGPP3DQ4SK" }, { vehicleType: "car", make: "Mercedes", model: "C250", vin: "J5QB24CFGS" }, { vehicleType: "car", make: "Honda", model: "Accord", vin: "XJLSXU6NA5" }, { vehicleType: "car", make: "Mercedes", model: "C250", vin: "J5QB24CFGS" }, { vehicleType: "car", make: "Dodge", model: "Durango", vin: "R90N8E95UB" }],
    result = Object.create(null),
    keys;

data.forEach(function (a) {
    result[a.vin] = result[a.vin] || [];
    result[a.vin].push(a);
});

keys = Object.keys(result);

console.log(keys);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Upvotes: 8

Gerard
Gerard

Reputation: 66

try this

var data = [{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"},
        {"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
        {"vehicleType":"car","make":"Dodge","model":"Durango","vin":"2UNHFBCQG0"},
        {"vehicleType":"car","make":"Volvo","model":"XC90","vin":"J37612ZVEC"},
        {"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
        {"vehicleType":"car","make":"Dodge","model":"Durango","vin":"OB60BC33LF"},
        {"vehicleType":"car","make":"Volvo","model":"XC90","vin":"DCA3364SGK"},
        {"vehicleType":"car","make":"Volvo","model":"XC60","vin":"FV2HML056G"},
        {"vehicleType":"car","make":"BMW","model":"328xi","vin":"IGPP3DQ4SK"},
        {"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
        {"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
        {"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
        {"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}];



        var array = [];
        for(var k= 0 ,l = data.length;k<l;k++){
            array[data[k].vin] = data[k];       
        }
        console.log(array);

Upvotes: 1

Vladu Ionut
Vladu Ionut

Reputation: 8183

You can use Array.reduce

var yourData = [{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"2UNHFBCQG0"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"J37612ZVEC"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"OB60BC33LF"},
{"vehicleType":"car","make":"Volvo","model":"XC90","vin":"DCA3364SGK"},
{"vehicleType":"car","make":"Volvo","model":"XC60","vin":"FV2HML056G"},
{"vehicleType":"car","make":"BMW","model":"328xi","vin":"IGPP3DQ4SK"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Honda","model":"Accord","vin":"XJLSXU6NA5"},
{"vehicleType":"car","make":"Mercedes","model":"C250","vin":"J5QB24CFGS"},
{"vehicleType":"car","make":"Dodge","model":"Durango","vin":"R90N8E95UB"}];


 var result = yourData.reduce(function (acc,curr) {
    acc[curr.vin]= acc[curr.vin] || [];
    acc[curr.vin].push(curr);
    return acc;
},{});
console.log(result);

Upvotes: 1

Anis D
Anis D

Reputation: 761

In ES2015: var arr = Object.values(obj);

Upvotes: 2

Related Questions