function parseKey() {
    var specialValues = ['null', 'true', 'false'];
    var key = '';
    var c = curr();

    var regexp = /[a-zA-Z_$\d]/; // letter, number, underscore, dollar character
    while (regexp.test(c)) {
      key += c;
      i++;
      c = curr();
    }

    if (specialValues.indexOf(key) === -1) {
      chars.push('"' + key + '"');
    }
    else {
      chars.push(key);
    }
  }
function parseKey() {
    var specialValues = ['null', 'true', 'false'];
    var key = '';
    var c = curr();

    var regexp = /[a-zA-Z_$\d]/; 
    while (regexp.test(c)) {
      key += c;
      i++;
      c = curr();
    }

    if (specialValues.indexOf(key) === -1) {
      chars.push('"' + key + '"');
    }
    else {
      chars.push(key);
    }
  }
function parseKey ( ) { var specialValues = [ 'null' , 'true' , 'false' ] ; var key = '' ; var c = curr ( ) ; var regexp = / [a-zA-Z_$\d] / ; // letter, number, underscore, dollar character while ( regexp . test ( c ) ) { key += c ; i ++ ; c = curr ( ) ; } if ( specialValues . indexOf ( key ) === - 1 ) { chars . push ( '"' + key + '"' ) ; } else { chars . push ( key ) ; } }
parse an unquoted key
parse an unquoted key