无法正确替换所有出现的json密钥

时间:2016-09-22 14:19:37

标签: javascript 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\\\\\\\"}]\\\"\""

为什么会这样?

2 个答案:

答案 0 :(得分: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"); 

答案 1 :(得分: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" );

现在看起来很可读。