2016-11-11 48 views
0

我有一個由供應商發送的JSON代碼塊。在我使用它之前,我必須操作所有按鍵(大約65個)以消除週期或干擾我的應用程序使用。嘗試使用JS替換函數的正則表達式模式來替換它們的下劃線。假設我有以下字符串:替換兩組重複字符之間的句點的所有實例

JSON_String = '{ "Test.String.One" : "Answer.One" , "Test.String.Two" : "Answer.Two" , "Test.String.Three" : "Answer.Three"}'; 

我需要一個正則表達式模式,將取代所有的鍵中的值的週期,但沒有。因此,這將是要麼之間{和所有時段:或之間,並且:

如果做得好應該是這樣的結果:

JSON_String = '{ "Test_String_One" : "Answer.One" , "Test_String_Two" : "Answer.Two" , "Test_String_Three" : "Answer.Three"}'; 

使用Rhino的JavaScript實現這樣一些事情,如應用程序\ K似乎不起作用(除非我在測試中做了錯誤的事情)。

任何人都可以提供正確的搜索模式來完成此任務?

我不反對使用循環,如果它不能在一個調用中完成。

像下面的東西會沒事的。我只需要得到一些工作。

while (JSON_String.search(/regex/g) != -1) 
{ 
    JSON_String = JSON_String.replace(/regex/g,'_') 
} 
+0

我可以做到這一點,但不使用正則表達式。你要嗎?? – youssouf

回答

0

你可以用正則表達式來做,但它可能比你需要做的更復雜。這可以很容易地與Object.keys().replace()完成:

var JSON_String = { "Test.String.One" : "Answer.One" , "Test.String.Two" : "Answer.Two" , "Test.String.Three" : "Answer.Three"}; 
 

 
document.querySelectorAll('code')[0].innerHTML = JSON.stringify(JSON_String); 
 

 
function UnderscoreKeys(obj) { 
 
    var keys = Object.keys(obj), 
 
     temp = {}; 
 
     
 
    for(var a = 0, len = keys.length; a < len; a++) { 
 
    \t  temp[keys[a].replace(/\./g, "_")] = obj[keys[a]]; 
 
    } 
 
    
 
    return temp; 
 
} 
 

 
JSON_String = UnderscoreKeys(JSON_String); 
 

 
document.querySelectorAll('code')[1].innerHTML = JSON.stringify(JSON_String);
<strong>Before:</strong><br /> 
 
<pre> 
 
    <code> 
 
    
 
    </code> 
 
</pre> 
 
<br /><br /><strong>After:</strong><br /> 
 
<pre> 
 
    <code> 
 
    
 
    </code> 
 
</pre>

0

,你可以簡單地使用。

function underscore(){ 
    var a = dotted = JSON.parse(JSON_string), underscored = {}; 
    for(var i in dotted){ 
      underscored[i.repace(/\./, "_")] = dotted[i]; 
     } 
    return JSON.stringify(underscored) 
    } 
相關問題