2016-05-25 3 views
0

Я извлекаю JSON-форматированные данные из URL-адреса Google Spreadsheet, как показано ниже. (Альтернатива link to JSON file.) Я просто хочу разобрать это и отобразить основные данные. Как я могу это сделать, учитывая, что все данные, которые я хочу, идентифицируются с одной и той же меткой, v?Как отображать определенные данные из строки JSON?

google.visualization.Query.setResponse({ 
    "version":"0.6", 
    "reqId":"0", 
    "status":"ok", 
    "sig":"1326357147", 
    "table":{ 
     "cols":[ 
     { 
      "id":"A", 
      "label":"Ref", 
      "type":"number", 
      "pattern":"General" 
     }, 
     { 
      "id":"B", 
      "label":"ÃÂrea", 
      "type":"string" 
     }, 
     { 
      "id":"C", 
      "label":"Curso", 
      "type":"string" 
     } 
     ], 
     "rows":[ 
     { 
      "c":[ 
       { 
        "v":1.0, 
        "f":"1" 
       }, 
       { 
        "v":"Diseño" 
       }, 
       { 
        "v":"Flash CS4 básico" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":2.0, 
        "f":"2" 
       }, 
       { 
        "v":"Diseño" 
       }, 
       { 
        "v":"Freehand MX " 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":3.0, 
        "f":"3" 
       }, 
       { 
        "v":"Diseño" 
       }, 
       { 
        "v":"Illustrator CS5" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":4.0, 
        "f":"4" 
       }, 
       { 
        "v":"Diseño" 
       }, 
       { 
        "v":"Photoshop CS4 avanzado" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":5.0, 
        "f":"5" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Word" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":6.0, 
        "f":"6" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Excel" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":7.0, 
        "f":"7" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Access" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":8.0, 
        "f":"8" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Outlook " 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":9.0, 
        "f":"9" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Powerpoint " 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":10.0, 
        "f":"10" 
       }, 
       { 
        "v":"Informática" 
       }, 
       { 
        "v":"Office 2007" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":11.0, 
        "f":"11" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"Comercio Electrónico" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":12.0, 
        "f":"12" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"Estrategias implant. NNTT para pymes" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":13.0, 
        "f":"13" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"Facebook" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":14.0, 
        "f":"14" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"LinkedIn" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":15.0, 
        "f":"15" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"NNTT para directivos de Pymes" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":16.0, 
        "f":"16" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"NNTT para RRHH" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":17.0, 
        "f":"17" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"Telemarketing" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":18.0, 
        "f":"18" 
       }, 
       { 
        "v":"NNTT Pymes" 
       }, 
       { 
        "v":"Twitter" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":19.0, 
        "f":"19" 
       }, 
       { 
        "v":"PRL y MA" 
       }, 
       { 
        "v":"Educ. para la igualdad de oportunid." 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":20.0, 
        "f":"20" 
       }, 
       { 
        "v":"PRL y MA" 
       }, 
       { 
        "v":"Fundament. adaptación LOPD en Pymes" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":21.0, 
        "f":"21" 
       }, 
       { 
        "v":"PRL y MA" 
       }, 
       { 
        "v":"Manipulador de alimentos" 
       } 
      ] 
     }, 
     { 
      "c":[ 
       { 
        "v":22.0, 
        "f":"22" 
       }, 
       { 
        "v":"PRL y MA" 
       }, 
       { 
        "v":"Prevención de Riesgos Laborales" 
       } 
      ] 
     } 
     ] 
    } 
}); 

ниже код, что я использую, чтобы сохранить JSON (ранее считанного из URL) в массиве и ходить, чтобы показать мне только строки данных.

var data = httpRequest.responseText; 
arrayDatos = data.split('{"c":'); 

for(var i = 1 ; i < arrayDatos.length; i++) 
{ 
    document.getElementById("body").innerHTML += arrayDatos[i] + '<br/>'; 
} 

ответ

1

О, боже, струнные операции на JSON? Как вы, возможно, не знаете, JSON является аббревиатурой для обозначения объектов JavaScript. Таким образом, в основном у вас есть представление String объекта Javascript, и вместо того, чтобы преобразовывать его обратно в собственный объект, который он представляет, вы решили использовать операции String для работы над ним. Ну, это сработает, но это будет также неэффективно и сложнее поддерживать.

Так вот вменяемая альтернатива, используя JSON.parse(data) восстановить объект из его представления JSON:

var objectData = JSON.parse(data); 
var rowsArray = objectData.table.rows; 
for(var i = 0 ; i < rowsArray.length; i++) { 
    var currentRow = rowsArray[i] 
    var cellArray = currentRow.c; 
    for (var j = 0; j < cellArray.length; j++) { 
     var currentCell = cellArray[j]; 
     document.getElementById("body").innerHTML += currentCell.v + '<br/>'; 
    } 
} 

Также обратите внимание, как каждая строка имеет массив ячеек. Хотя ваш вопрос в лучшем случае неявный, я полагаю, это может быть вашей проблемой, так как ваш код в настоящее время разделяет массив ячеек.

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