getJSON-google-sheets icon indicating copy to clipboard operation
getJSON-google-sheets copied to clipboard

Throwing NOT_FOUND as error instead?

Open arcataroger opened this issue 4 years ago • 0 comments

Hi and thanks for this script! Was super helpful.

I made a minor tweak so that it would return an actual error in the cell instead of the NOT_FOUND string. This makes it work better with IFERROR():

function getJsonValue(path, obj) {
  function cleanObjPart(s) {
    // Handle the case when processing an array element (e.g. "jobs[0]")
    var re = /(\w+)\s*\[\s*(\d+)\s*\]\s*/;
    var match = re.exec(s);
    var objPart;
    if (match != null) {
      var elem1 = match[1];
      var index = parseInt(match[2], 10);
      objPart = obj[elem1][index];
    }
    else {
      objPart = obj[s];
    }
    return objPart;
  }

  var NOT_FOUND = "notFound";
  var parts = path.split(/(?!\B"[^"]*)\.(?![^"]*"\B)/);
  var part;
  var last = removeDoubleQuotes(parts.pop());
  while ((part = parts.shift())) {
    part = removeDoubleQuotes(part);
    var objPart = cleanObjPart(part);
    if (typeof objPart != "object") throw new Error(NOT_FOUND);
    obj = objPart;
  }

  var r = cleanObjPart(last);
  if (r === undefined) 
  {throw new Error(NOT_FOUND)}
  else {return r}
}

Is that helpful at all?

arcataroger avatar Feb 22 '21 18:02 arcataroger