Невозможно проанализировать все JSON значений в скрипте приложений Google (конечные запятые) - PullRequest
1 голос
/ 25 мая 2020

Я запрашиваю API, и json, который я получаю, это

{
   "items":[
      {
         "id":"231321",
         "externalId":32131",
         "status":"published",
         "network":"facebook",
         "message":"message",
         "externalChannels":[
            "231312"
         ],
         "pictures":[
            picture"
         ],
         "type":"picture",
         "facebook":{
            "dark":false
         },
         "labels":[
            "bus",
            "train",
            "car"
         ],

Когда я пытаюсь проанализировать часть меток, я получаю только первое значение, а не другое тоже. Я погуглил и обнаружил, что это запятые, но я не смог найти никаких решений. Есть мысли?

РЕДАКТИРОВАТЬ: Используя приведенный ниже сценарий, я могу видеть в регистраторе все значения меток, но только первое записано в таблице.

function getdata() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('api');
  var range = sheet.getRange("A:C");
  var response = UrlFetchApp.fetch("api call");
  var dataAll = JSON.parse(response.getContentText());
  var dataSet = dataAll.items;
  var rows = [],
    data;
  for (i = 0; i < dataSet.length; i++) {
    data = dataSet[i];

    rows.push([new Date(),data.labels]); //your JSON entities here
  }
  Logger.log(rows)
  //sheet.getRange(getlastRow() + 1, 1, rows.length, 2).setValues(rows);
  sheet.getRange(sheet.getLastRow() + 1, 1, rows.length, 2).setValues(rows);

1 Ответ

1 голос
/ 25 мая 2020

Проблема не в конечной запятой, а в структуре вашего json - у вас есть объект внутри объекта

  • Если ваш json выглядит, как описано в вашем вопросе (I Предположим, что недостающие скобки и кавычки являются ошибками при вводе), это не строка, а уже действительный JSON объект , который не нужно анализировать.
  • Действительно, пытаясь parse не-строка выдаст вам ошибку
  • Если вы хотите получить доступ к отдельным элементам вашего объекта JSON, вы можете, например, pu sh их в массив, разделенный ключом a и значение
  • Это удобно сделать с помощью Object.keys

Пример:

function myFunction() {
  var myObject = {
    "items":[
      {
        "id":"231321",
        "externalId":"32131",
        "status":"published",
        "network":"facebook",
        "message":"message",
        "externalChannels":[
          "231312"
        ],
        "pictures":[
          "picture"
        ],
        "type":"picture",
        "facebook":{
          "dark":false
        },
        "labels":[
          "bus",
          "train",
          "car"
        ],
      }
    ]
  }
  var data = myObject.items;
  var array = [];
  for (var i = 0; i< data.length; i++){
    var newJson = Object.keys(data[i]).map(function (key) { 
      return [key, data[i][key]]; 
    }); 
    for(var j = 0; j< newJson.length; j++){
      array.push(newJson[j]);
    }
  }
  Logger.log(array);
  Logger.log(array[0][0] + " is " + array[0][1]);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...