我有一个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"}';
应用程序正在使用Javascript的Rhino实现,所以像\ K这样的东西似乎不起作用(除非我在测试中做错了。)
任何能够提供正确搜索模式的人都可以实现这一目标吗?
如果无法在一次通话中完成,我不反对使用循环。
类似下面的内容会很好。我只需要做点工作。
while (JSON_String.search(/regex/g) != -1)
{
JSON_String = JSON_String.replace(/regex/g,'_')
}
答案 0 :(得分: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++) {
temp[keys[a].replace(/\./g, "_")] = obj[keys[a]];
}
return temp;
}
JSON_String = UnderscoreKeys(JSON_String);
document.querySelectorAll('code')[1].innerHTML = JSON.stringify(JSON_String);
&#13;
<strong>Before:</strong><br />
<pre>
<code>
</code>
</pre>
<br /><br /><strong>After:</strong><br />
<pre>
<code>
</code>
</pre>
&#13;
答案 1 :(得分: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)
}