我有类似字符串的JSON,如下所示:
{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 :(得分:2)
如果它始终采用这种格式,我可能会做类似的事情:
,
拆分剩下的字符串,然后你得到一个这样的数组:['key:my.value1', 'key2:my.value2']
:
分割每个条目,这将为您提供键/值对如果您只需要遍历整个过程,那么您就准备好了。如果要将其转换为json,请创建一个新映射并将键/值对放入其中。
答案 1 :(得分:1)
如果您确定格式,可以通过将每个key:value
对包装在引号中来创建JSON字符串
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 :(得分:1)
这样可以。 - >
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));
示例 - &gt; Fiddle