static/helpers.js
function safeGet (obj, path) {
    // split ['c:chart'].row[0] into ['c:chart', 'row', 0]
    var paths = path.replace(/\[/g, '.').replace(/\]/g, '').replace(/'/g, '').split('.')

    for (var i = 0; i < paths.length; i++) {
      if (paths[i] === '') {
        // the first can be empty string if the path starts with ['chart:c']
        continue
      }

      var objReference = 'obj["' + paths[i] + '"]'
      // the last must be always array, also if accessor is number, we want to initialize as array
      var emptySafe = ((i === paths.length - 1) || !isNaN(paths[i + 1])) ? '[]' : '{}'
      new Function('obj', objReference + ' = ' + objReference + ' || ' + emptySafe)(obj)

      obj = new Function('obj', 'return ' + objReference)(obj)
    }

    return obj
  }
function safeGet (obj, path) {
    // split ['c:chart'].row[0] into ['c:chart', 'row', 0]
    var paths = path.replace(/\[/g, '.').replace(/\]/g, '').replace(/'/g, '').split('.')

    for (var i = 0; i < paths.length; i++) {
      if (paths[i] === '') {
        // the first can be empty string if the path starts with ['chart:c']
        continue
      }

      var objReference = 'obj["' + paths[i] + '"]'
      // the last must be always array, also if accessor is number, we want to initialize as array
      var emptySafe = ((i === paths.length - 1) || !isNaN(paths[i + 1])) ? '[]' : '{}'
      new Function('obj', objReference + ' = ' + objReference + ' || ' + emptySafe)(obj)

      obj = new Function('obj', 'return ' + objReference)(obj)
    }

    return obj
  }
function safeGet ( obj , path ) { // split ['c:chart'].row[0] into ['c:chart', 'row', 0] var paths = path . replace ( / \[ / g , '.' ) . replace ( / \] / g , '' ) . replace ( / ' / g , '' ) . split ( '.' ) for ( var i = 0 ; i < paths . length ; i ++ ) { if ( paths [ i ] === '' ) { // the first can be empty string if the path starts with ['chart:c'] continue } var objReference = 'obj["' + paths [ i ] + '"]' // the last must be always array, also if accessor is number, we want to initialize as array var emptySafe = ( ( i === paths . length - 1 ) || ! isNaN ( paths [ i + 1 ] ) ) ? '[]' : '{}' new Function ( 'obj' , objReference + ' = ' + objReference + ' || ' + emptySafe ) ( obj ) obj = new Function ( 'obj' , 'return ' + objReference ) ( obj ) } return obj }
Safely go through object path and create the missing object parts with
empty array or object to be compatible with xml -> json represantation
Safely go through object path and create the missing object parts with empty array or object to be compatible with xml - > json represantation