2016-09-22 6 views
-1

こんにちは私は入れ子になったjsonオブジェクトを持っています。jsonキーのすべての出現を正しく置き換えることができません

すべての名前を変更する場合はtotal_exec_qty_buy & total_exec_qty_selltotal_exec_qtyとします。 total_num_ords

からtotal_num_ords_buy & total_num_ords_sell私は、次の方法でそれをやっている:

newArray = JSON.stringify(newArray).split('"total_exec_qty_buy":').join('"total_exec_qty":'); 

私は(1以上)ただ一つの文を実行すると、出力は結構です。 しかし、私はこれを行うとき:

newArray = JSON.stringify(newArray).split('"total_exec_qty_buy":').join('"total_exec_qty":'); 
    newArray = JSON.stringify(newArray).split('"total_exec_qty_sell":').join('"total_exec_qty":'); 
newArray = JSON.stringify(newArray).split('"total_num_ords_buy":').join('"total_num_ords":'); 
    newArray = JSON.stringify(newArray).split('"total_num_ords_sell":').join('"total_num_ords":'); 

を、私はこの出力を得る:

"\"\\\"[{\\\\\\\"total_wt_arr_slp_buy\\\\\\\":\\\\\\\"-1.9322\\\\\\\",\\\\\\\"total_exec_qty\\\\\\\":\\\\\\\"49654\\\\\\\",\\\\\\\"total_wt_buy\\\\\\\":\\\\\\\"0.31\\\\\\\",\\\\\\\"total_wt_arr_last_slp_buy\\\\\\\":\\\\\\\"-0.1924\\\\\\\",\\\\\\\"total_wt_ivwap_slp_buy\\\\\\\":\\\\\\\"-0.1103\\\\\\\",\\\\\\\"total_exec_val_buy\\\\\\\":\\\\\\\"3224372.00\\\\\\\",\\\\\\\"total_ord_qty_buy\\\\\\\":\\\\\\\"61688\\\\\\\",\\\\\\\"total_num_ords_buy\\\\\\\":\\\\\\\"859\\\\\\\"},{\\\\\\\"total_wt_arr_last_slp_sell\\\\\\\":\\\\\\\"-1.2509\\\\\\\",\\\\\\\"total_ord_qty_sell\\\\\\\":\\\\\\\"139654\\\\\\\",\\\\\\\"total_exec_qty_sell\\\\\\\":\\\\\\\"111012\\\\\\\",\\\\\\\"total_wt_ivwap_slp_sell\\\\\\\":\\\\\\\"-0.1833\\\\\\\",\\\\\\\"total_wt_sell\\\\\\\":\\\\\\\"0.69\\\\\\\",\\\\\\\"total_exec_val_sell\\\\\\\":\\\\\\\"7129344.00\\\\\\\",\\\\\\\"total_num_ords_sell\\\\\\\":\\\\\\\"1099\\\\\\\",\\\\\\\"total_wt_arr_slp_sell\\\\\\\":\\\\\\\"-2.4978\\\\\\\"},{\\\\\\\"total_wt_arr_last_slp\\\\\\\":\\\\\\\"-0.9213\\\\\\\",\\\\\\\"total_exec_qty\\\\\\\":\\\\\\\"160666\\\\\\\",\\\\\\\"total_wt_ivwap_slp\\\\\\\":\\\\\\\"-0.1606\\\\\\\",\\\\\\\"total_wt_arr_slp\\\\\\\":\\\\\\\"-2.3216\\\\\\\",\\\\\\\"total_ord_qty\\\\\\\":\\\\\\\"201342\\\\\\\",\\\\\\\"total_num_ords\\\\\\\":\\\\\\\"1958\\\\\\\",\\\\\\\"total_notional\\\\\\\":\\\\\\\"10353698.63\\\\\\\"}]\\\"\"" 

なぜこの出来事はあります?

+0

これは、最初の操作の後にすでに文字列であるにもかかわらず、不必要に 'newArray'をストリング化しているからです。 –

+0

配列を文字列にしたままにしておくと、毎回引用符をエスケープします。この構造体を実際に文字列の置き換えで修正したいのであれば、正規表現を使ってみてください。しかし、オブジェクト自体を操作してキーを追加/削除したり、正しいキーで新しいオブジェクトを構築したりする方が簡単でしょう。 JSON.stringifyを使い続けたい場合は、最初にONCEを使用し、文字列であるものをストリング化する代わりに、その文字列で作業を続けます。 – Shilly

答えて

0

これは、JSON.stringify()に電話をかけ続けているために発生しています。

文字列化JSONオブジェクトを一度してからstr.replaceを(使用)の代わりに:

var jsonStr = JSON.stringify(jsonObj); 
jsonStr = jsonStr.replace("total_exec_qty_buy", "total_exec_qty");  
jsonStr = jsonStr.replace("total_exec_qty_sell", "total_exec_qty"); 
jsonStr = jsonStr.replace("total_num_ords_buy", "total_num_ords"); 
jsonStr = jsonStr.replace("total_num_ords_sell", "total_num_ords"); 
0

あなたは間違ってそれをチェーン化しています。文字列を2回目の文字列にしています。

は、あなたが今、これが今読みに見えるいくつかのリファクタリング

function splitAndJoin(str, splitter, joiner) 
{ 
    return str.split(splitter).join(joiner); 
} 
var stringifiedArr = JSON.stringify(newArray); 
stringifiedArr = splitAndJoin(stringifiedArr , "total_exec_qty_buy", "total_exec_qty"); 

をすることによって、これを最適化することができ、この

var stringifiedArr = JSON.stringify(newArray); 
stringifiedArr = stringifiedArr.split('"total_exec_qty_buy":').join('"total_exec_qty":').split('"total_exec_qty_sell":').join('"total_exec_qty":').split('"total_num_ords_buy":').join('"total_num_ords":').split('"total_num_ords_sell":').join('"total_num_ords":'); 

newArray = JSON.parse(stringifiedArr); 

を試してみてください。

関連する問題