Remove empty objects from a JSON

277 views
Skip to first unread message

Timothy Hanson

unread,
Nov 10, 2022, 12:33:26 PM11/10/22
to Google Apps Script Community
I have code that creates a JSON from the data in two sheets.

If the start row of the data is greater than 2, the JSON will have empty {} in it.

I need to remove all empty objects from my JSON.

Thank you for any help with this

{
    "elements": [
        {
            "Label": "Bob",
            "Type": "Person"
        },
        {
            "Label": "Caral",
            "Type": "Person"
        },
        {
            "Label": "Ted",
            "Type": "Person"
        },
        {},
        {},
        {},
        {},
        {}
    ],
    "connections": [
        {
            "Id": "conn-1",
            "From": "Bob",
            "To": "Carol",
            "Transaction": "Giving",
            "Flow": -3,
            "Running Balance": 22,
            "Date": "15/10/2022",
            "Type": "Person"
        },
        {
            "Id": "conn-2",
            "From": "Bob",
            "To": "Ted",
            "Transaction": "Giving",
            "Flow": -1,
            "Running Balance": 24,
            "Date": "17/10/2022",
            "Type": "Person"
        },
        {},
        {},
        {},
        {},
        {}
    ]
}

The JSON is being generated by

function doGet(request) {
  // Get request params.
  var sheetKey   = request.parameters.id;
  var sheetName1 = request.parameters.sheet1;
  var sheetName2 = request.parameters.sheet2;
  var callback   = request.parameters.callback;
  var headerRow  = request.parameters.header;
  var startRow   = request.parameters.startrow;

  var prefix     = request.parameters.prefix;
  var separator  = request.parameters.separator;
  var emptycells = request.parameters.emptycells;
  var cellarrays = request.parameters.cellarrays;
  var separator2 = request.parameters.separator2;
  var columnignore = request.parameters.columnignore;
  var colprefix = request.parameters.colprefix;
  //Logger.log(sheetKey)
  // Parse the spreadsheet.
  var spreadsheet = SpreadsheetApp.openById(sheetKey); //.getActiveSpreadsheet();
  
  if(sheetName1!=''){    
    var keys = getHeaderRowKeys_(spreadsheet, sheetName1, headerRow, columnignore, colprefix);
    var data1 = readData_(spreadsheet, sheetName1, headerRow, keys, startRow,prefix,separator,emptycells,cellarrays,separator2,columnignore, colprefix);      
  }
  
  if(sheetName2!=''){    
    var keys = getHeaderRowKeys_(spreadsheet, sheetName2, headerRow, columnignore, colprefix);
    var data2 = readData_(spreadsheet, sheetName2,headerRow, keys, startRow,prefix,separator,emptycells,cellarrays,separator2,columnignore, colprefix);    
  } 

  // Write and return the response.
  if(sheetName1!='' && sheetName2!=''){    
    var response = JSON.stringify({ elements: data1,connections: data2 },null,'\t');  
  }
  else if(sheetName1!='' && sheetName2==''){
    var response = JSON.stringify({ elements: data1 },null,'\t');  
  }
  else if(sheetName1=='' && sheetName2!=''){
    var response = JSON.stringify({ connections: data2 },null,'\t');  
  }

  var output = ContentService.createTextOutput();
    
  if(callback == undefined){
    // Serve as JSON
    output.setContent(response).setMimeType(ContentService.MimeType.JSON);
  } 
  else{
    // Serve as JSONP
    output.setContent(callback + "(" + response + ")").setMimeType(ContentService.MimeType.JAVASCRIPT);
  }  
  
  //output.setContent(callback + "(" + response + ")").setMimeType(ContentService.MimeType.JAVASCRIPT);
  
  return output;
}

Andrew Roberts

unread,
Nov 11, 2022, 3:09:22 AM11/11/22
to google-apps-sc...@googlegroups.com
Use Object.keys() and if this comes back as zero it will tell you that object is empty, or you could use JSON.stringify() and check for an empty string.

--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-apps-script-community/24c6efb1-d42d-4b08-9a29-438cfccd62dan%40googlegroups.com.

N A

unread,
Nov 12, 2022, 7:08:59 AM11/12/22
to Google Apps Script Community
Looks like a JS question, but you can do this by using combination of Object.entries(), Array.filter(), Object.keys(), and Array.length.

Hope that helps.

Reply all
Reply to author
Forward
0 new messages