2012-12-03 66 views
9

我正在留意使用字典中的值作为字典内部参考的快捷方式。代码显示我的意思:JSON内部参考声明

var dict = { 
    'entrance':{ 
     'rate1': 5, 
     'rate2':10, 
     'rate3':20, 
    }, 

    'movies':{ 
     'theDarkKnight':{ 
      '00:00':<entrance.rate1>, 
      '18:00':<entrance.rate2>, 
      '21:00':<entrance.rate3> 
     }, 
     ... 
    }; 

有没有偷偷摸摸的方法来做到这一点?

+3

不幸的是,JSON不支持递归/自引用。 –

+0

这不是JSON。您是否在使用文字语法创建对象时询问自引用?还是你说你想让指定的值自动更新,并更改参考值?由于它不是JSON,因此可以使用函数或属性获取器来获取其他属性的当前值。 –

+0

@AlvinWong:“JSON” - >“JavaScript Object Notation”,因此:JSON = JavasScript。 – Cerbrus

回答

9

号,你可以做的最好的是:

var dict = { 
    'entrance' : { 
     'rate1' : 5, 
     'rate2' : 10, 
     'rate3' : 20, 
    } 
}; 
dict.movies = { 
    'theDarkKnight' : { 
     '00:00' : dict.entrance.rate1, 
     '18:00' : dict.entrance.rate2, 
     '21:00' : dict.entrance.rate3 
    }, 
    ... 
}; 
3

你可以使用mustache和定义JSON作为一个“胡子模板”,然后运行胡子呈现模板。考虑到你需要运行(n)次,如果你有嵌套的依赖关系。在这种情况下,您有3个依赖关系ABC --> AB --> A

var mustache = require('mustache'); 

var obj = { 
    A : 'A', 
    AB : '{{A}}' + 'B', 
    ABC : '{{AB}}' + 'C' 
} 

function render(stringTemplate){ 
    while(thereAreStillMustacheTags(stringTemplate)){ 
    stringTemplate = mustache.render(stringTemplate, JSON.parse(stringTemplate)); 
    } 
    return stringTemplate; 
} 

function thereAreStillMustacheTags(stringTemplate){ 
    if(stringTemplate.indexOf('{{')!=-1) 
    return true; 
    return false; 
} 

console.log(render(JSON.stringify(obj))); 

,输出是:

{"A":"A","AB":"AB","ABC":"ABC"}