我需要使用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。我需要将其转换为有效对象的帮助。
答案 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))