2012-02-09 5 views
3

Пример вывода из PHP:JavaScript: Удалить ключи от объекта JSon

{ 
    "RootName_0":{"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    "RootName_1":{"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
} 

Как я могу использовать Backbone.js или jQuery только иметь:

[ 
    {"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    {"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
] 

Если это проще использовать PHP для редактирования JSON , Так тому и быть.

+0

Просто исправьте выход PHP. Не должно быть трудно. Во всяком случае, это глупый выход JSON! –

+0

Выход JSON не может быть изменен, его необходимо изменить после его создания. –

+0

Почему это так? Также не используйте такие запятые: –

ответ

8

Ну, в PHP, было бы легко, просто использовать array_values() на исходном массиве так, чтобы он «забывает» индексы массива (который, кстати, является то, что «RootName_X» называется в вашем случае:

$newvalue = array_values((array)$value); 
echo json_encode($newvalue); 

В JavaScript, это немного сложнее, но это было бы на линиях:

var newvalue = []; 
for(var root in value) 
    newvalue.push(value[root]); 

Заголовок вопроса is был немного запутанным, так как это, конечно, не теги.

1

Использование ES5 (современные браузеры), вы можете сделать:

Object.keys(received).map(function(key) { 
    return received[key]; 
}); 

В основном, преобразование объекта в массив его ключей, то заменяя каждую клавишу со значением.

+0

Хороший! Очень компактный. Тем не менее, он сначала должен получить объект Javascript из своего содержимого JSON. –

+1

@ Планы гонок на орбите: я предположил, что OP уже может получить JSON (который является куском пирога с использованием jQuery). Это просто вопрос запуска этого внутри обратного вызова ajax. – pimvdb

+0

Знаете, что предполагается –

1

В JavaScript, если myFirstVar содержит исходный объект, а затем сделать:

mySecondVar = [ myFirstVar.RootName_0, myFirstVar.RootName_1 ]; 
+0

Это не особенно расширяемо. –

+1

Не стесняйтесь сделать его более универсальным. Я просто показывал эту концепцию. –

2

Нет необходимости в JQuery или Backbone:

var obj = { 
    "RootName_0":{"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    "RootName_1":{"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
}; 
var colors = []; 

for(var key in obj){ 
    colors.push(obj[key]); 
}; 

Значение, которое вы хотите сейчас в colors массиве.

1

После того, как JSON был разобран, сделайте это с помощью jQuery.map JQuery, и заимствования глобальной Object функции ...

var arr = $.map(obj,Object); 

EDIT:

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

Вы можете исправить это, если ключи RootName_n являются последовательными, и вы знаете n последнего ключа.

var last_key = 20; 

var arr = []; 

for(var i = 0; i <= last_key; i++) 
    arr.push(obj['RootName_' + i]); 
Смежные вопросы