Вопрос

Привет, ребята! Прежде всего, я знаю, что такие вещи довольно дерьмовые, но именно так я визуализирую достижение своей цели.

Вот сделка: у меня есть объект JSON, который содержит массив, но, к сожалению, я должен переходить через список одного объекта JSON, а затем вытекать через этот массив, который я занимался раньше. Объект JSON выглядит следующим образом (это на португальском языке, но вы, ребята, можете понять это):

{"produtos": [{"key": "derivados de ferro", "value": 217816909}, {"key": "madeiras, suas manufaturas e mobiliário médico cirúrgico", "value": 11781290}, {"" ключ ":" Value ": 11781290}, {" " ":" Celulose, Papel E Suas Obras "," Value ": 100086937}, {" Key ":" Carne Suína "," Значение ": 81738783}, {" Key ":" Carne Bovina "," значение ": 74894768 }, {"Key": "carne de aves", "value": 65292433}, {"key": "utros", "value": 444520811}], "ano": 2005, "tipo": 1}

Produtos - это массив, который я упомянул, и у меня есть два других значения: Ano (год) и Tipo (тип). Мой код выглядит следующим образом:

jQuery.getJSON("/webportos/Porto/GraficoComercio?id=" + iddoporto.className + "&ano=2005", null, function (items) {                
    jQuery.each(items, function (itemNo, item) {
        jQuery.each(item.produtos, function (dicNo, dic) {
            options.series.push({ name: dic.Key, data: dic.Value});                             
            options.title.text = "Comércio - "+item.ano;
            options.yAxis.title.text = "Exportação";                                
            options.tooltip.formatter = function () {
                return '<b><u>' + this.series.name + '</u></b><br/><b>' + this.x + '</b>: ' + this.y + ' ';
            }           
        });
    });

    chart = new Highcharts.Chart(options);              
});

Этот кусок кода делает хромированную консоль JavaScript для отображения:

ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:32 Uncaught TypeError: Cannot read property 'length' of undefined

Вы можете мне помочь?

Это было полезно?

Решение

Это потому, что вы пытаетесь использовать.

jQuery.each(items, function (itemNo, item) {

На мой взгляд, jQuery.eper (Object, обратный вызов, Args) предназначен только для использования в массивах. Первое, что он делает, - это вызовет object.length. Итак, если у вас нет

[{"produtos": [{"key": "derivados de ferro", "value": 217816909}, {"key": "madeiras, suas manufaturas e mobiliário médico cirúrgico", "value": 11781290}, {"" ключ ":" Value ": 11781290}, {" " ":" Celulose, Papel E Suas Obras "," Value ": 100086937}, {" Key ":" Carne Suína "," Значение ": 81738783}, {" Key ":" Carne Bovina "," значение ": 74894768 }, {"Key": "carne de aves", "value": 65292433}, {"key": "utros", "value": 444520811}], "ano": 2005, "tipo": 1}]

Ты получишь эту ошибку.

Кроме того, вы можете принять во внимание предложение Diodeus. jQuery. Вы немного менее эффективно, чем просто использовать для цикла через ваши данные.

Другие советы

Вам не нужно jQuery для итерации через данные JSON. Используйте простой старый JavaScript.

Смотрите этот вопрос: Показать иерархию JSON/YAML как дерево в HTML?

function renderJSON(obj) {
    var keys = []
    var retValue = ""
    for (var key in obj) {
            if(typeof obj[key] == 'object') {
                    retValue += "<div class='tree'>" + key                                          
                    retValue += renderJSON(obj[key])
                    retValue += "</div>"
            }
            else {
                    retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>"
            }

       keys.push(key)
    }
    return retValue
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top