jpath.js
function fetchFromObject(obj, prop, newValue) {
    //property not found
    if (typeof obj === 'undefined') return false;
	if (!prop) {
		if (typeof newValue != 'undefined') {
			obj = newValue;
		}
		return obj;
	}

	var props = prop.split('.');
	var arr = props[0].split(/[\[\]]+/);
	var index = -1;
	if (arr.length>1) {
		index = parseInt(arr[1],10);
	}

    //property split found; recursive call
    if (props.length>1) {
		var pos = prop.indexOf('.');
        //get object at property (before split), pass on remainder
		if (index>=0) {
			return fetchFromObject(obj[arr[0]][index], prop.substr(pos+1), newValue); //was props
		}
		else {
			return fetchFromObject(obj[arr[0]], prop.substr(pos+1), newValue);
		}
	}
	//no split; get property[index] or property
	var source = obj;
	if (arr[0]) source = obj[prop];
	if (index>=0) {
		if (typeof newValue != 'undefined') source[index] = newValue;
		return source[index];
	}
    else {
		if (typeof newValue != 'undefined') obj[prop] = newValue;
		return obj[prop];
	}
}
function fetchFromObject(obj, prop, newValue) {
    //property not found
    if (typeof obj === 'undefined') return false;
	if (!prop) {
		if (typeof newValue != 'undefined') {
			obj = newValue;
		}
		return obj;
	}

	var props = prop.split('.');
	var arr = props[0].split(/[\[\]]+/);
	var index = -1;
	if (arr.length>1) {
		index = parseInt(arr[1],10);
	}

    //property split found; recursive call
    if (props.length>1) {
		var pos = prop.indexOf('.');
        //get object at property (before split), pass on remainder
		if (index>=0) {
			return fetchFromObject(obj[arr[0]][index], prop.substr(pos+1), newValue); //was props
		}
		else {
			return fetchFromObject(obj[arr[0]], prop.substr(pos+1), newValue);
		}
	}
	//no split; get property[index] or property
	var source = obj;
	if (arr[0]) source = obj[prop];
	if (index>=0) {
		if (typeof newValue != 'undefined') source[index] = newValue;
		return source[index];
	}
    else {
		if (typeof newValue != 'undefined') obj[prop] = newValue;
		return obj[prop];
	}
}
simple object accessor using dotted notation and [] for array indices