将特定字符串转换为 JSON 对象

Convert Specific String to JSON Object

const test ="[{contactId=2525, additionDetail=samle}]";

我需要将此字符串转换为 JSON 对象。它会像这个字符串一样动态加载。我需要特定的字符串才能转换为 JSON 对象。

JSON.parse(test) 命令对此不起作用。我在这里附上了错误。

您应该注意到 Json 表示 javascript 对象表示法,因此您需要创建一个 JavaScript 对象才能开始:

const test ="[{contactId=2525, additionDetail=samle}]";
let obj = Object.create(null)

您现在可以将变量定义为对象属性之一:

obj.test = test

现在我们有一个 JavaScript 对象,我们可以将它转换为 json:

let convertedToJson = JSON.stringify(test);

[{contactId=2525, additionDetail=samle}]

这不是有效的 JSON 字符串,JSON.parse()

无法解析它

正确的 JSON-字符串应该是:

const test ='[{"contactId":2525, "additionDetail":"samle"}]';

对于那个特定的字符串,您必须自己解析它。

const test = '[{contactId=2525, additionDetail=samle}]';
const obj = {};
test.split(/[{}]/)[1].split(/, /).forEach((elm) => {
  const entry = elm.split('=');
  obj[entry[0]] = entry[1];
});

我正在做的是在大括号上拆分字符串并选择第二个元素(利用正则表达式)然后将其拆分为逗号和 space(再次是正则表达式)然后遍历结果并分配给一个对象. 然后,您可以 JSON.stringify(obj) 获取结果。

:编辑:

对于您要求的第二个字符串,有另一个可能更精确的答案。您需要先将 = 替换为 :(我再次使用了正则表达式),然后使用正则表达式来匹配单词和句子,并使用函数添加引号。

const test = '[{contactId=2525, additionDetail=samle}]';
const test2 = "[{contactId=2525, additionDetail=rrr additional Detail, medicationType={medicationTypeId=3333, medicationType=Tablet}, endDate=2022-12-30}]";

const replaced = test.replace(/=/g,':')
const replaced2 = test2.replace(/=/g, ':');

const replacer = function(match){
    return '"' + match + '"';
}

const replacedQuote = replaced.replace(/(?!\s)[-?\w ?]+/g,replacer);
const replaced2Quote = replaced2.replace(/(?!\s)[-?\w ?]+/g,replacer);


const obj = JSON.parse(replacedQuote);
const obj2 = JSON.parse(replaced2Quote);