从JSON生成有效的JSON,如字符串 - Regex?

时间:2016-09-26 09:55:11

标签: javascript json regex

我有类似字符串的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"
}

3 个答案:

答案 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