【问题标题】:Parsing unquoted JSON string [duplicate]解析不带引号的 JSON 字符串 [重复]
【发布时间】:2018-07-19 19:53:12
【问题描述】:

解析不带引号的 JSON 字符串最简单的方法是什么?
例如,如果我有以下情况:

{property1:value1,property2:value2}

以下抛出错误:

JSON.parse( badJSONString );

因为正确的 JSON 应该引用键和值:{"property1":"value1"}

【问题讨论】:

  • 你从哪里得到那个字符串?有没有办法让它有引号?
  • 很遗憾,这是不可能的。
  • 我认为你的选择是用你的字符串制作正则表达式
  • @ASDFGerte 您可能应该删除该评论。 “可能”和“建议”是完全不同的两件事。
  • 一个有趣的方法是删除花括号并将字符串解析为一组对。以下是一个实现示例,如果您需要多种类型的值,则需要一个值解析器。 data.replace(/[{}]/g, '').split(',').map(val => val.split(':')).reduce((init, [key, val]) => Object.assign(init, { [key]: yourValueParser(val) } ), {}).

标签: javascript json string parsing


【解决方案1】:

如果你的数据是一致的(这可能是一个很大的问题),你可以用一个非常简单的函数来处理字符串。以下将失败,某些字符串的值或字符串中包含逗号或冒号,如'{property1:val:ue1 ,property2:val,ue2}',但如果数据中没有一些分隔符,这些无论如何都会有问题。

let bad = '{property1:value1,property2:value2}'
let obj = bad.slice(1, -1).split(/\s?,\s?/)
    .map(item => item.split(':'))
    .reduce((a, [key, val]) => Object.assign(a, {[key]: val}), {})

console.log(obj)

【讨论】:

    【解决方案2】:

    选项可能如下:

    var initial = "{property1:value1,property2:value2}"; // string (unquoted JSON)
    
    var cleaned = initial.trim().substring(1, initial.length - 1); // remove `{` and `}`
    
    var kvPair = cleaned.split(',');              // get an array like ["property1:value1", "property2:value2"]
    var final = {};
    var split;
    for (var i = 0, l = kvPair.length; i < l; i++) {
      split = kvPair[i].split(':');               // get an array like ["property1","value1"]
      final[split[0].trim()] = split[1].trim();   // add value X to property X (remove whitespaces at the beginning and end)
    }
    console.log(final)

    jsfiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多