2013-05-09 3 views
16

JSON.stringify(または類似のもの)を使用してオブジェクトをストリング化する場合、ストリングの深さを制限する方法があります。つまり、nのレベルがオブジェクトツリーに深く入り込むだけです:プレースホルダを置いて、何かが残っていることを示します)?JSONのストリングの奥行きを制限する

私はfunction (key, value)という形の置換機能を持っていますが、置換機能に渡された現在のキーと値のペアの元のオブジェクトに深さを取得する方法が見つかりませんでした。

デフォルトのJSON.stringify実装でこれを行う方法はありますか?あるいは私は自分でストリンジェンシーを実装すべきポイントに達しましたか? または、このオプションがあることをお勧めできる別のストリングライブラリがありますか?

+1

この質問の回答が参考になった可能性があります。http://stackoverflow.com/questions/13861254/json-stringify-deep-objects – Strille

+0

@Strille Hm、それは私が欲しいことをする実装を含んでいます。私はそれを取る、つまり、それはデフォルトの実装では不可能ですか?私はむしろ、それがネイティブに実装されて以来、より速いと仮定するので、デフォルトの実装を使用したいと思います。しかし、ポインタのおかげで! –

+0

いいえ、私はあなたが残念なことに聞いたことをデフォルト実装ではできないと確信しています。 – Strille

答えて

1

オブジェクトの深いクローン(low-dashなどのライブラリを使用)を作成し、何をしたいのかを行い、それをJSON.stringifyに渡します。私はJSONを再発明しようとはしません.stringify、それは間違った場所での努力です。

は、[編集]は、誰かが既にあなたが示唆された何をしたように見えます:JSON.stringify deep objects

私はお勧めしません。このもののネイティブJSON.stringifyは常に速くなるだろうので、より堅牢な

[EDIT]ここは、あなたがやりたいように思われるライブラリです:http://philogb.github.io/jit/static/v20/Docs/files/Core/Core-js.html#私は、サードパーティのライブラリを含むことなく、第1のレベル上のオブジェクトを文字列化したかっ$ jit.json.prune

+0

あなたは*限定深度クローン*を意味しますか? – Bergi

+0

そうすることができますが、コピーやプルーニングより効率的かもしれません –

2

/あまりにも多くのコード。

var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 

例:

var obj = { 
 
    keyA: "test", 
 
    keyB: undefined, 
 
    keyC: 42, 
 
} 
 
obj.keyD = obj; 
 

 
var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 
 
console.log(json);

を追加することにより

あなたが同じ探しの場合

は、ここではそうするために迅速ワンライナーです値の前に空の文字列があれば、値を文字列に自動的にキャストします。ただし、要素がnullまたは未定義の場合は、キャストしないようにキーをチェックする必要があります。

関連する問題