【问题标题】:Make valid JSON from JSON like string - Regex?从 JSON 之类的字符串生成有效的 JSON - 正则表达式?
【发布时间】:2017-02-03 14:42:50
【问题描述】:

我有类似 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"
}

【问题讨论】:

  • 我们是否假设mymy.value1value2都定义在当前范围内?
  • 嗨@Phil 它实际上是字符串,所以值也应该始终是字符串,请检查我的编辑

标签: javascript json regex


【解决方案1】:

如果它总是采用这种格式,我可能会这样做:

  • 修剪花括号
  • 将剩余的字符串除以,,然后得到一个像这样的数组:['key:my.value1', 'key2:my.value2']
  • 遍历该列表中的所有条目,并将每个条目按: 拆分,这将为您提供键/值对

如果您只需要遍历整体,那么您就可以开始了。如果要将其转换为 json,请创建一个新映射并将键/值对放入其中。

【讨论】:

  • 不错的方法 :) 我个人更喜欢@Phill 之一,但是你对这个解决方案赞不绝口。
【解决方案2】:

如果您确定格式,您可以通过将每个 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"')));

【讨论】:

    【解决方案3】:

    这样可以吗。 ->

    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

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 2017-05-15
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2018-04-06
      • 2015-11-16
      相关资源
      最近更新 更多