JSON Strings to MultiDimensional Arrays
I seem to have a problem converting an array backwards and forwards between PHP/JS. I'm using an XmlHttpRequest from JavaScript to a PHP page which uses json_encode to encode a multidimensional (2D) array.
When receiving the string, I use JSON.parse() to decode the string, but it comes back as a 1D array. Is there any way to parse a JSON string into a multidimensional array rather than single dimension?
Example of the JSON recieved (from a CSV file):
[
{
"rating": "0",
"title": "The Killing Kind",
"author": "John Connolly",
"type": "Book",
"asin": "0340771224",
"tags": "",
"review": "i still haven't had time to read this one..."
},
{
"rating": "0",
"title": "The Third Secret",
"author": "Steve Berry",
"type": "Book",
"asin": "0340899263",
"tags": "",
"review": "need to find time to read this book"
},
{
"rating": "3",
"title": "The Last Templar",
"author": "Raymond Khoury",
"type": "Book",
"asin": "0752880705",
"tags": "",
"review": ""
},
{
"rating": "5",
"title": "The Traveller",
"author": "John Twelve Hawks",
"type": "Book",
"asin": "059305430X",
"tags": "",
"review": ""
},
{
"rating": "4",
"title": "Crisis Four",
"author": "Andy Mcnab",
"type": "Book",
"asin": "0345428080",
"tags": "",
"review": ""
},
{
"rating": "5",
"title": "Prey",
"author": "Michael Crichton",
"type": "Book",
"asin": "0007154534",
"tags": "",
"review": ""
},
{
"rating": "3",
"title": "The Broker (Paperback)",
"author": "John Grisham",
"type": "Book",
"asin": "0440241588",
"tags": "book johngrisham",
"review": "good book, but is slow in the middle"
},
{
"rating": "3",
"title": "Without Blood (Paperback)",
"author": "Alessandro Baricco",
"type": "Book",
"asin": "1841955744",
"tags": "",
"review": ""
},
{
"rating": "5",
"title": "State of Fear (Paperback)",
"author": "Michael Crichton",
"type": "Book",
"asin": "0061015733",
"tags": "",
"review": ""
},
{
"rating": "4",
"title": "The Rule of Four (Paperback)",
"author": "Ian Caldwell",
"type": "Book",
"asin": "0099451956",
"tags": "book bestseller",
"review": ""
},
{
"rating": "4",
"title": "Deception Poin开发者_JAVA百科t (Paperback)",
"author": "Dan Brown",
"type": "Book",
"asin": "0671027387",
"tags": "book danbrown bestseller",
"review": ""
},
{
"rating": "5",
"title": "Digital Fortress : A Thriller (Mass Market Paperback)",
"author": "Dan Brown",
"type": "Book",
"asin": "0312995423",
"tags": "book danbrown bestseller",
"review": ""
},
{
"rating": "5",
"title": "Angels & Demons (Mass Market Paperback)",
"author": "Dan Brown",
"type": "Book",
"asin": "0671027360",
"tags": "book danbrown bestseller",
"review": ""
},
{
"rating": "4",
"title": "The Da Vinci Code (Hardcover)",
"author": "Dan Brown",
"type": " Book ",
"asin": "0385504209",
"tags": "book movie danbrown bestseller davinci",
"review": ""
}
]
Once parsed, if I try to access it using myArr[0][1], it shows as undefined.
Forgive me if this is obvious, I'm new to JS and JSON
Edit: After your edit showing your actual JSON:
The JSON you've defined isn't defining a two-dimensional array, it's defining a one-dimensional array of objects. Once deserialized, you'd access (say) the title of the first book like so:
alert(myArray[0].title);
Live example (note that in that example I've had to escape the single quotes in the JSON you gave in order to put the whole thing inside a JavaScript string; don't let that throw you, your JSON text is correct and valid as you quoted it, it's just that I'm putting it inside a string delimited with single quotes, so I have to escape the single quotes in it)
Original answer:
JavaScript arrays are always one-dimensional, but each entry in an array can, itself, be a reference to an array, which effectively makes for two-dimensional arrays. JSON has no problem with these when encoded properly:
[
[1, 2, 3],
[4, 5, 6]
]
That's JSON notation for an array with two entries, each of which is an array with three entries.
Example using Crockford's JSON stringifier and parser (the syntax below is also now standard as of ECMAScript5, but not all browsers have it yet):
var a, str, b;
a = [
[1, 2, 3],
[4, 5, 6]
];
display("a.length = " + a.length);
display("a[0] = " + a[0].join(","));
display("a[1] = " + a[1].join(","));
str = JSON.stringify(a);
display("JSON string: " + str);
b = JSON.parse(str);
display("b.length = " + b.length);
display("b[0] = " + b[0].join(","));
display("b[1] = " + b[1].join(","));
Output:
a.length = 2 a[0] = 1,2,3 a[1] = 4,5,6 JSON string: [[1,2,3],[4,5,6]] b.length = 2 b[0] = 1,2,3 b[1] = 4,5,6
Live copy
精彩评论