whole_func_string: function fix(a, b) {
        /* istanbul ignore if : too hard to create a test case for it */
        if (!a || !b) {
          return a;
        }
  
        for (let k in b) { // eslint-disable-line
          if (b.hasOwnProperty(k)) {
            /* istanbul ignore if : too hard to create a test case for it */
            if (is.plainObject(b[k])) {
              a[k] = is.plainObject(a[k]) ? fix(a[k], b[k]) : b[k];
            } else if (is.string(b[k]) && /^[0-9]+$/.test(b[k])) {
              // convert string into a number
              a[k] = to.number(b[k]);
            } else if (is.string(b[k]) && b[k][0] === '{') {
              // convert string into an object
              a[k] = fix({}, to.object(b[k]));
            } else {
              a[k] = b[k];
            }
          }
        }
  
        return a;
      }
func_code_string: function fix(a, b) {
        /* istanbul ignore if : too hard to create a test case for it */
        if (!a || !b) {
          return a;
        }
  
        for (let k in b) { // eslint-disable-line
          if (b.hasOwnProperty(k)) {
            /* istanbul ignore if : too hard to create a test case for it */
            if (is.plainObject(b[k])) {
              a[k] = is.plainObject(a[k]) ? fix(a[k], b[k]) : b[k];
            } else if (is.string(b[k]) && /^[0-9]+$/.test(b[k])) {
              // convert string into a number
              a[k] = to.number(b[k]);
            } else if (is.string(b[k]) && b[k][0] === '{') {
              // convert string into an object
              a[k] = fix({}, to.object(b[k]));
            } else {
              a[k] = b[k];
            }
          }
        }
  
        return a;
      }
func_documentation_string: The following should be an object but the csv parser returns it as a string so this is used to fix that mistake `"{\"latitude\":-6.081689835,\"longitude\":145.3919983,\"level-2\":{\"level-3\":\"woohoo\"}}"` it also doesn't handle numbers correctly so this fixes those instances as well