преобразование строки в действительное значение json - PullRequest
0 голосов
/ 15 марта 2020

Мне нужно извлечь объект из javascript файла, используя node.js. Я могу прочитать файл javascript, а также нарезать строку, которую мне нужно преобразовать в качестве объекта. Вот мой код.

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

Мне просто нужен объект person из этого файла, и я могу добиться этого с помощью оператора слайса. Теперь он дает мне строку, которая выглядит следующим образом:

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

Я попытался разобрать ее, но она не действительна JSON. Мне нужна помощь в преобразовании его в действительный объект.

1 Ответ

1 голос
/ 15 марта 2020

Вы можете сделать это с небольшим количеством регулярных выражений. Первый заменяет все имена свойств на себя, но в кавычках. Второй удаляет запятые перед закрывающей скобкой. Обратите внимание, что это очень простое решение agile и может сломаться, если вы бросите в него что-то неожиданное. Лучше просто запустить файл, запустить команду AboutLocale, а затем JSON .stringify выводить в действительный 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...