Необходимо преобразовать пары ключ-значение json в стандартный массив - PullRequest
3 голосов
/ 09 января 2012

Я вставляю строку json в переменную с помощью функции parseJSON () jquery.Проблема в том, что он превращает мои данные в объект вместо 2d-массива.Например,

myData = $.parse(JSON(data));
myData.name// = "Bob"

Проблема в том, что имя не должно быть ключом (при условии, что это правильный термин).Вместо этого должно быть:

myData[0] // = "name"
myData[1] // = "Bob"

Как бы это преобразовать?Или есть метод, отличный от использования цикла for для прохода по индексу массива (но все же можно получить доступ и к ключу, и к значению в виде строки, как в 2d массиве).

РЕДАКТИРОВАТЬ: Это какой-то json, который используется (обратите внимание, он НАМНОГО дольше).Это то, что дается для «данных»

{"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"}

Ответы [ 2 ]

5 голосов
/ 09 января 2012

Как только вы десериализовали данные (например, у вас есть myData, который является объектом), вы можете перебрать его ключи, используя for..in, а затем создать массив, который объединяетключи и значения:

var myData, dataArray, key;
myData = $.parse(JSON(data));
dataArray = [];
for (key in myData) {
    dataArray.push(key);         // Push the key on the array
    dataArray.push(myData[key]); // Push the key's value on the array
}

Поскольку myData является результатом десериализации JSON в data, мы знаем, что myData является универсальным объектом (например, просто {} в отличие отnew Foo или что-то в этом роде), поэтому нам даже не нужно hasOwnProperty.Если бы мы этого не знали, а хотели только перечислить myData собственные ключи и значения, мы добавили бы проверку hasOwnProperty:

var myData, dataArray, key;
myData = $.parse(JSON(data));
dataArray = [];
for (key in myData) {
    if (myData.hasOwnProperty(key)) {
        dataArray.push(key);         // Push the key on the array
        dataArray.push(myData[key]); // Push the key's value on the array
    }
}

Нет никакой причины делать это в вашем случае, если только кто-то не копался с Object.prototype (в этом случае, отведите их за лесной сарай, дайте им серьезное сокрытие, а затем попросите их написать: «Я не будухулить с Object.prototype несколько сотен раз на доске), но всякий раз, когда вы используете for..in, всегда хорошо остановиться и подумать: а) гарантированно ли объект ванильный, и б) если нет, вы хотите толькосвои собственные свойства, или вы также хотите, чтобы он наследовал?

1 голос
/ 09 января 2012
var data = $.parse(JSON({"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"}));

var arr = [];

for( var i in data ) { 
  if( data.hasOwnProperty( i ) ){ 
    arr.push( i,  data[i] );
  }
}

Массив будет:

["feat_3", "4356", "feat_4", "45", "feat_5", "564", "feat_6", "7566"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...