2012-12-03 18 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"} 
関連する問題