Cryonic
Cryonic

Reputation: 21

JS: Combine two JSON objects into one, but without making a numeric index

I've got a localstorage, where JSONs are saved as string. I want to combine all selected JSONs (via selection) into a new one. My current code is this:

function combine() {
var combName = prompt("Please enter a group name", "Group1");
var sel = document.getElementById("listComb");
var endJson={};

for(var i=0;i<sel.options.length;i++) {
    alert(sel.options[i].text);
    $.extend(endJson, endJson, JSON.parse(localStorage.getItem(sel.options[i].text)));
}
// Write the new item to localStorage
localStorage.setItem(combName,JSON.stringify(endJson));

}

With that code, I get an element which looks like the following:

{
  "0": {
      "a": ""...
   },
  "1": {
      "a": ""...
   }
}

But I need a format like this:

[
  {
      "a": ""...
   },
   {
      "a": ""...
   }
]

Does anybody know how to fix this?

EDIT: Thanks for the solution, T.J. Crowder

here's my new code:

function combine() {
    var combName = prompt("Please enter a group name", "Group1");
    var sel = document.getElementById("listComb");
    var combined = []; // <== Array

    for(var i=0;i<sel.options.length;i++) {
        combined[i] = JSON.parse(localStorage.getItem(sel.options[i].text)); // <== Add to it
    }

    // Write the new item to localStorage
    localStorage.setItem(combName, JSON.stringify(combined));
}

Upvotes: -1

Views: 811

Answers (2)

madalinivascu
madalinivascu

Reputation: 32354

Change you endJson to a array

function combine() {
var combName = prompt("Please enter a group name", "Group1");
var sel = document.getElementById("listComb");
var endJson=[];

for(var i=0;i<sel.options.length;i++) {
    alert(sel.options[i].text);
    endJson.push(JSON.parse(localStorage.getItem(sel.options[i].text)));
}
// Write the new item to localStorage
localStorage.setItem(combName,JSON.stringify(endJson));

}

Upvotes: 0

T.J. Crowder
T.J. Crowder

Reputation: 1075269

Create an array, not a plain object, see commented lines:

function combine() {
    var combName = prompt("Please enter a group name", "Group1");
    var sel = document.getElementById("listComb");
    var combined = []; // <== Array

    for(var i=0;i<sel.options.length;i++) {
        combined[i] = JSON.parse(localStorage.getItem(sel.options[i].text)); // <== Add to it
    }

    // Write the new item to localStorage
    localStorage.setItem(combName, JSON.stringify(combined));
}

Upvotes: 0

Related Questions