将字符串转换为有效的json

时间:2020-03-15 16:08:39

标签: javascript node.js json string

我需要使用node.js从javascript文件中提取对象。我能够读取javascript文件,也能够切片需要转换为对象的字符串。这是我的代码。

const AboutLocale = function() {
  return {
    person: {
      name: "zxczv",
      age: 25,
      gender: "male",
    },
    ar: true,
  };
};

我只想要该文件中的person对象,并且能够使用slice运算符实现此目的。现在它给了我一个看起来像这样的字符串

  "{
    name: "man",
    age: 25,
    gender: "male",
  }"

我尝试解析它,但它不是有效的JSON。我需要将其转换为有效对象的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用一些正则表达式来做到这一点。第一个用自己替换所有属性名称,但用引号引起来。第二个删除句号前的逗号。请注意,这是一个非常脆弱的解决方案,如果对它抛出任何意外的情况,它可能会中断。最好只运行文件,运行AboutLocale命令,然后将输出内容JSON字符串化为有效的JSON。

const input = `{
    name: "man",
    age: 25,
    gender: "male",
  }`

const input2 = `{header:"Aboutjdkahsfjk34",productShortName:"OBDX123456",version:"Version",servicePack:"Service Pack",poweredByValue:"asag",copyright:"Copyright 2006-2020",build:"Build",name:"manav"}`

const input3 = `{header:"Aboutjdka,hsfjk34",productShortName:"OBDX1,23456",version:"Version",servicePack:"Service Pack",poweredByValue:"asag",copyright:"Copyright 2006-2020",build:"Build",name:"manav"}`

fixed = input.replace(/\b(.*?):/g, "\"$1\":").replace(/,.*\n.*}/gm, "}")
fixed2 = input2.replace(/([,{])(.*?):/g, "$1\"$2\":")

let fixed3 = ""
let inAProperty = false
input3.split("").forEach((e,i) => {
  if (e === "{") fixed3 += "{\""
  else if (e === ":") fixed3 += "\":"
  else if (e === ",") fixed3 += inAProperty ? e : ",\""
  else if (e === "\"") {
    inAProperty = !inAProperty
    fixed3 += e
  } else fixed3 += e
})

console.log(fixed)
console.log(JSON.parse(fixed))

console.log(fixed2)
console.log(JSON.parse(fixed2))

console.log(fixed3)
console.log(JSON.parse(fixed3))