2016-09-26 41 views
2

我喜歡JSON字符串,它看起來像:從字符串JSON中生成有效的JSON - Regex?

{key1:my.value1,key2:value2} 

它不能有任何嵌套的對象或數組。 我甚至可以證明它會一直這樣用正則表達式

var re = /^\{[A-Z0-9._]+:[A-Z0-9._]+(,[A-Z0-9._]+:[A-Z0-9._]+)*\}$/i; 
 
console.log(re.test('{key1:my.value1,key2:value2}')) // true

它看起來非常相似,但它不是有效的JSON,所以我不能迭代它。

問題: 有沒有辦法從這個JSON如字符串有效的JSON?

我正在考慮一些正則表達式或其他東西,但真的不知道如何做到這一點。有任何建議嗎?

結果: 從JSON我上面的有效的JSON應該是這樣的:

{ 
    "key1": "my.value1", 
    "key2": "value2" 
} 
+0

難道我們假設'my','my.value1'和'value2'在當前範圍內的所有定義? – Phil

+0

嗨@Phil它真實的字符串,所以值應該總是字符串,請檢查我的編輯 – Andurit

回答

1

如果你確定的格式,你可以簡單地通過包裹每個key:value一對引號

var str = '{key1:my.value1,key2:value2}', 
 
    rx = /([A-Z0-9._]+):([A-Z0-9._]+)/gi; 
 

 
console.log(JSON.parse(str.replace(rx, '"$1":"$2"')));

2

如果它總是以這種格式,我可能會做這樣的事情:

  • 修剪花括號
  • 將剩餘的字符串拆分爲,,然後獲得如下數組:['key:my.value1', 'key2:my.value2']
  • 循環找出此列表中的所有條目,並通過:他們每個人的分裂,這將使你的鍵/值對

如果你需要的是遍歷entires,那麼你就準備好走。如果你想把它轉換成json,創建一個新的地圖,並把鍵/值對。

+0

好方法如何做到這一點:)我peronaly pref @Phill one但是你有我的拇指這個解決方案。 – Andurit

1

這將是確定創建一個JSON字符串。 - >

function makeJsonString(v) { 
    var s = v.split(/({|}|:|,)/g). 
     filter(function (e) { return e.length !== 0 }), 
     r = '{}:,'; 
    for (var l = 0; l < s.length; l ++) { 
     var x = s[l]; 
     if (r.indexOf(x) < 0) { 
      s[l] = '"' + s[l] + '"'; 
     } 
    } 
    return s.join(''); 
} 

var x = makeJsonString('{key1:my.value1,key2:value2}'); 
//parse check 
console.log(JSON.parse(x)); 

示例 - >Fiddle