2016-11-02 7 views
2

JSON.parse関数を使用して、新しく作成されたオブジェクト(ネストレベルが何であれ)にプロパティや関数を追加する方法はありますか?JSON.parseプロパティまたはfuncを追加しますか?

reviverオプションを使用する(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) jsonを解析する際に気にしないまたは気にしないプロパティを削除できます。

JSON.parse(
'{"name":"toplevel",'+ 
' "gibberish":"...",'+ 
' "children":['+ 
' {"name":"child1",'+ 
' "gibberish":"..."'+ 
' },'+ 
' {"name":"child2",'+ 
' "gibberish":"..."'+ 
' }'+ 
' ]'+ 
'}' 
,(key,value)=>{ 
if (key=="gibberish") 
{ 
    return undefined; 
} 
return value 
}); 

=> 
{"name":"toplevel" 
"children":[ 
    {"name":"child1"}, 
    {"name":"child2"} 
] 
} 

上記のコードは、作成されたすべてのオブジェクトの不器用なプロパティを削除します。 今、プロパティを追加するために何ができますか(uniqueID)?

私は再びオブジェクトツリーを走査すべきですか? (そして、typeOf(およびそのバグ)を処理して、プロパティがnullまたはArrayではなくオブジェクトであるかどうかを推測してください)。

+1

これを解析すると、そのJSオブジェクトが解析されます。プロパティを追加するなど、必要なものを追加することができます。 – Amy

+0

私の問題はネストについてです。どれくらい深くても、すべてのオブジェクトにfuncを追加したいと思います。 – frenchone

+0

あなたは何を意味していますか?すべてのObjects_にfuncを追加したいですか?サンプル出力を追加できますか? – Grundy

答えて

0

JSONデータを必要に応じて作成し、インスタンス。

function Class() {...} 
Class.prototype.accept = function(visitor) {...}; 
Class.prototype.copyFromJSON = function() { 
    delete this.gibberish; 
    this.children = this.children.map(function(child) { 
     child = Object.assign(new ChildClass, child); 
     child.copyFromJSON(); 
     return child; 
    }); 
}; 
function ChildClass() {...} 
ChildClass.prototype.copyFromJSON = function() { 
    delete this.gibberish; 
    ... 
} 
var instance = Object.assign(new Class, JSON.parse(json)); 
instance.copyFromJSON(); 
+0

これはトップレベルのインスタンスでのみ機能します。私はネスティングを扱うものを探しています。 – frenchone

+0

上記の更新された例を参照してください。 JSONデータに型を割り当てるためにネストされた動作を実装する必要があります。もう1つの方法は、コンストラクタの呼び出しを避ける必要がある場合は、 'Object.create(Class.prototype)'を使用することです。 – JohnLock

関連する問題