`new Function` for json reference
Assuming that you control over the value of the target attribute, I suggest to store the reference chain as a list of attribute names. Then you can easily resolve the reference without having to resort to eval-like meta-programming. A reduction would be ideal like you mentioned.



function referenceToObject(json, target)
{
 if (target === undefined)
  target = json.target;

 return target.reduce(referenceToObject.reductor, json);
}

referenceToObject.reductor = function(obj, attrib)
{
 return obj[attrib];
};


var example = {
 "target": ['first', 'second'],
 "first": {
  second: 'hi'
 }
};

console.log(referenceToObject(example));