Реорганизовать массив массивов в массив хэшей и преобразовать в JSON - PullRequest
1 голос
/ 17 апреля 2011

У меня есть следующий массив

var arr=[[10,20,30],[12,21,33],[13,23,35]];

Как я могу преобразовать этот массив в JSON. Желаемый результат

myJSONarr=[ {"x":10 ,"y":20,"z":30}, {"x":12 ,"y":21,"z":33}, {"x":13, "y":23,"z":35} ];

Полагаю, мне нужно определить массив sting

var objArray=["x","y","z"];

и обведите эти два значения с помощью функции eval(). Любая помощь с благодарностью.

Ответы [ 7 ]

1 голос
/ 17 апреля 2011

, если вы используете jquery:

var arr=[[10,20,30],[12,21,33],[13,23,35]],
myjson = JSON.stringify($.map(arr,function(a){return {x:a[0],y:a[1],z:a[2]}}));

http://jsfiddle.net/herostwist/yDRwh/

, если вы используете прототип:

var myjson  = JSON.stringify([[10,20,30],[12,21,33],[13,23,35]].map(function(a){
              return {x:a[0],y:a[1],z:a[2]}}));

http://jsfiddle.net/herostwist/yDRwh/1/

0 голосов
/ 17 апреля 2011

Просто выполните цикл по массиву и создайте строку из каждого массива внутри него, затем объедините строки, чтобы сформировать строку JSON:

var items = [];
for (var i = 0; i < arr.length; i++) {
  items.push('{"x":'+arr[i][0]+',"y":'+arr[i][1]+',"z":'+arr[i][2]+'}');
}
var myJSONarr = '[' + items.join(',') + ']';
0 голосов
/ 17 апреля 2011

То, что вы описываете, - это не просто преобразование JSON.На самом деле у вас есть массив, полный трехэлементных массивов чисел, и вам нужен JSON для массива хэшей, где каждый триплет становится хешем над "x", "y", "z".

В любом случае, если вам нужна простая функция .toJSON (), Prototype.js включает функцию .toJSON () для большинства объектов, что делает ее действительно простой.

http://www.prototypejs.org/learn/json

Не проверено ...

var arr=[[10,20,30],[12,21,33],[13,23,35]];
var myarrOfXYZ = arr.collect(function(T){ return $H({ x: T[0], y: T[1], z: T[2] }) });
var myJSON = myarrOfXYZ.toJSON();

Обратите внимание, что в прототипе также есть функция "zip", которую можно использовать в строке 2 вместо $ H

.
0 голосов
/ 17 апреля 2011

Много разных ответов, вот еще:

http://jsfiddle.net/Vecqc/

<textarea id="text" style="width: 100%;"></textarea>

var arr = [[10,20,30],[12,21,33],[13,23,35]];
var stringify = [];

for (var i = 0; i < arr.length; i++) {
    stringify[i] = {'x':arr[i][0],'y':arr[i][0],'z':arr[i][0]};
}

document.getElementById('text').value = JSON.stringify(stringify);
0 голосов
/ 17 апреля 2011

Первый:

var arr = [[10,20,30], [12,21,33], [13,23,35]];

var arr2 = [];
for (var i in arr) {
    var a = arr[i];
    arr2.push({
        x: a[0],
        y: a[1],  
        z: a[2]
    });
}

Или, используя функции высшего порядка:

var labels = ["x", "y", "z"];
var arr = [[10,20,30], [12,21,33], [13,23,35]];
var arr2 = arr.map(function(a) {
    return a.reduce(function(prev, curr, i) {
        prev[labels[i]] = curr;
        return prev;
    }, {});
});

Затем напрямую преобразуйте новый массив в JSON.

0 голосов
/ 17 апреля 2011

Моя версия. Изменить: я не веточку objArray не было частью проблемы, но предложение ОП как часть решения. Ну да ладно, мне все равно нравится.

var arr=[[10,20,30],[12,21,33],[13,23,35]];    
var objArray=["x","y","z"];

var myJSONarr = [];

for (var idx = 0; idx != arr.length; idx++) {
    var row = {};
    for (var idx2 = 0; idx2 != objArray.length; idx2++) {
       row[objArray[idx2]] = arr[idx][idx2];
    }
    myJSONarr.push(row);
}

alert(JSON.stringify(myJSONarr));
0 голосов
/ 17 апреля 2011

Предполагая, что вы просто хотите сопоставить значения объектам JavaScript :

var objs = [];

for(var i = 0, l = arr.length; i < l; i++) {
    var p = arr[i];
    objs.push({x: p[0], y: p[1], z: p[2]});
}

Если вы действительно хотите создать строку JSON, вы можете передать этот массив в JSON.stringify.JSON доступен во всех современных браузерах и может быть загружен для более старых .


†: Почему я предполагаю здесь?Потому что люди путают JSON с объектными литералами JavaScript.В вашем коде myJSONarr - это , а не JSON.Это массив объектов JS.Это будет JSON, если данные будут содержаться в строке:

var myJSONarr = '[{"x":10, "y":20, "z":30}, ...]';

JSON != JavaScript object

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...