解析未引用的JSON字符串

时间:2018-07-19 19:53:13

标签: javascript json string parsing

解析未引用的JSON字符串最简单的方法是什么?
例如,如果我有以下内容:

-enter-done

以下引发错误:

-enter

因为正确的JSON应该包含引用的键和值:{property1:value1,property2:value2}

2 个答案:

答案 0 :(得分:2)

如果数据一致(如果很大),则可以使用非常简单的函数来处理字符串。对于某些在值中带有逗号或冒号的字符串或类似'{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)

答案 1 :(得分:1)

一个选项可能如下:

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