2016-09-22 42 views
-1

喜的所有occurence我有一個嵌套的JSON對象。不能夠取代的一個JSON關鍵正確

我想重命名所有出現的total_exec_qty_buy & total_exec_qty_selltotal_exec_qty; total_num_ords_buy & total_num_ords_selltotal_num_ords

我做它以下列方式:

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

當我這樣做只是一個聲明(上面一個),那麼輸出是罰款。 但是,當我這樣做:

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

您不斷對數組進行字符串化,每次都會爲您導出引號。嘗試使用正則表達式,如果你真的想解決這個結構字符串替換,但它可能是更容易,如果你只是與對象的工作itsself和添加/刪除鍵或只是建立一個新的對象,具有正確的密鑰。如果你想透過JSON.stringify保留,只在開始使用一次,並保持與該字符串辦公而不是字符串化FO的東西,已經是一個字符串。 – 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

您不正確鏈接它。你正在第二次將字符串串起來。

試試這個

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); 

您可以通過做一些重構

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"); 

這現在看起來可讀現在優化此。