2015-09-14 6 views
-1

Я получаю JSON с помощьюПостроение массива из JSON

$.getJSON("http://localhost:8080/test_json/", function(data) { 

}); 

Вывод выглядит следующим образом.

{"items":[{"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7}]} 

После некоторых обрезки

data = JSON.stringify(data); 
data = data.substring(9); 
data = data.substring(0, data.length - 1); 
data = data.replace(/[{}]/g, " "); 
console.log(data); 

Похоже, что этот

["1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7] 

Я хотел бы "деконструкции" (?) Это, чтобы удалить все ключи, так что только значения остаются.

[1 ,2 ,3 , 4 , 5 , 6 ,7] 

Я собираюсь использовать это, чтобы нарисовать графики. Поэтому, скажем, это могут быть мои данные, которые я собираюсь передать в свою библиотеку диаграмм.

+0

Я думаю, что такой подход является длинной, если все дело в том, чтобы просто получить значения. Вы можете выполнять итерацию через объект данных. Если вы должны иметь его в отдельном массиве, arr [], $ .each (data, function (key, val) {arr.push (val)}) будет работать –

+0

, почему вы сначала конвертируете его в строку? Это было задано почти ежедневно на SO, вы искали? Вы найдете ответы aplenty –

+0

Почему это объект в первую очередь, если ключи, по-видимому, не имеют никакого значения? Я предполагаю, что вы контролируете генерацию данных JSON, не можете ли вы вывести массив для начала? Я также повторю вышеприведенные чувства: не конвертируйте объект/массив в строку, а затем манипулируйте строкой! У вас уже есть совершенно управляемая и доступная структура данных, вам просто нужно пройти ее. – deceze

ответ

4

Пожалуйста, не начинайте «обрезать» ваш JSON так. Просто проанализируйте его и обработайте как любой другой объект.

var json = '{"items":[{"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7}]}'; 

Разбираем ваш JSON в объект JS (Тхо я отмечаю, что вы используете JQuery, чтобы получить данные таким образом, это будет анализироваться уже, так что вы можете пропустить этот шаг):

var obj = JSON.parse(json); 

Захват первого элемента items (массива), который является другим объект:

var items = obj.items[0]; 

Захватите пункт ключей с Object.keys() и использовать этот массив для возвращения значения с map.

var vals = Object.keys(items).map(function (el) { 
    return items[el]; 
}); // [ 1, 2, 3, 4, 5, 6, 7 ] 

DEMO

EDIT

Так что теперь у вас есть некоторые новые данные:

var json = '{"items":[{"sum":188700.75},{"sum":633927.98},{"sum":7000},{"sum":65169.26},{"sum":17114.67},{"sum":252340.96},{"sum":1073246.73}]}' 

Следующая JS будет захватывать значение sum от каждого объекта:

var items = obj.items; 
var vals = items.map(function (el) { 
    return el.sum; 
}); 

Выход

[ 188700.75, 633927.98, 7000, 65169.26, 17114.67, 252340.96, 1073246.73 ] 

DEMO

+0

Да, но это будет массив ключей, в то время как я думаю, что OP нуждается в массиве значений. – pawel

+1

Спасибо, я этого не заметил. Исправлена. – Andy

+1

Да, Энди, это все, очень! – Paran0a

0

У вас есть данные JSON, почему нужно stringify это?

var input = data.items[0] 

    var arr = $.map(input,function(v){ 
    return v; 
    }); 
0

Другой подход от того, что вам сказали.

Вам не нужно обрезать данные.

var json = JSON.parse(data); 
var items = json.items[0]; 

И вам не нужно удалять ключи, вы можете отправлять значения в другой массив.

var listOfItems = []; 

for(var key in items) 
    listOfItems.push(items[key]); 
+0

'items' - это массив, поэтому это не сработает. – Andy

+0

@ Andy Единственное, что нужно было восстановить, это 'json.items' в' json.items [0] ', чем работает, как и ожидалось. ;) – Linesofcode

+0

Затем вы должны отредактировать свой ответ, потому что, поскольку он стоит, это бесполезно. – Andy

0

Во-первых, если вы хотите, чтобы извлечь значения, вы можете сделать это с помощью доступа к нему, как это:

var obj = data.items[0]; 

Ваша переменная obj будет выглядеть следующим образом:

{"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7} 

Тогда Я думаю, вам придется перебирать этот объект, чтобы сделать его массивом:

var arr = []; 
for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
    arr.push(obj[key]); 
    } 
} 

Затем переменная arr будет содержать элементы, которые вы хотите.

DEMO

Смежные вопросы