[英]regular expression add double quotes around values and keys in javascript
我需要一個有效的 JSON 格式來請求 ES。 我有一個像
{
time: {
from:now-60d,
mode:quick,
to:now }
}
但是當我嘗試使用JSON.parse
出現錯誤,因為我的字符串應該像
{
time: {
"from":"now-60d",
"mode":"quick",
"to":"now" }
}
所以我的問題是,有什么解決方案可以在我的字符串的鍵和值周圍添加雙引號?
謝謝
也許你可以使用:
str.replace(/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)/g, "\"$1\":\"$2\"");
注意
在字符組[a-zA-Z0-9-]
,我使用alphabetical
digits
和 a -
,也許您需要其他digits
,因此您可以使用另一個字符
此函數將添加引號並刪除對象末尾的任何額外逗號
function normalizeJson(str){return str.replace(/"?([\w_\- ]+)"?\s*?:\s*?"?(.*?)"?\s*?([,}\]])/gsi, (str, index, item, end) => '"'+index.replace(/"/gsi, '').trim()+'":"'+item.replace(/"/gsi, '').trim()+'"'+end).replace(/,\s*?([}\]])/gsi, '$1');}
編輯:
這個其他函數支持 json 數組。
它還可以將單引號轉換為雙引號,並將引號與數字和布爾值分開。
function normalizeJson(str){
return str.replace(/[\s\n\r\t]/gs, '').replace(/,([}\]])/gs, '$1')
.replace(/([,{\[]|)(?:("|'|)([\w_\- ]+)\2:|)("|'|)(.*?)\4([,}\]])/gs, (str, start, q1, index, q2, item, end) => {
item = item.replace(/"/gsi, '').trim();
if(index){index = '"'+index.replace(/"/gsi, '').trim()+'"';}
if(!item.match(/^[0-9]+(\.[0-9]+|)$/) && !['true','false'].includes(item)){item = '"'+item+'"';}
if(index){return start+index+':'+item+end;}
return start+item+end;
});
}
未加引號的 JSON 並不是真正有效的 JSON。 它只是 JavaScript。 如果您信任此字符串的來源:
var obj = eval("'({
time: {
from:now-60d,
mode:quick,
to:now }
})'");
對於來自不受信任來源的字符串,不建議這樣做,因為它可能存在安全風險。
鑒於您從 Kibana 獲取可能受信任的數據,評估字符串應該沒問題。
另一種選擇是使用其他答案可能詳細說明的正則表達式。 或者,您可能希望修復 Kibana 導出以提供正確/有效的 JSON 字符串。
美好的一天伊德里斯
如果你想在所有有效的鍵名和值周圍加上引號,也許看看這個表達式。 YCF_L 的回答完全符合您的要求。 但這里仍然如此。
{(?=[a-z])|[a-z](?=:)|:(?=[a-z])|[a-z](?=,)|,(?=[a-z])|[a-z](?=})
str.replace(/{(?=[a-z])|[a-z](?=:)|:(?=[a-z])|[a-z](?=,)|,(?=[a-z])|[a-z](?
=})/igm, $&");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.