Разобрать массивоподобную строку, содержащую имена переменных, в массив - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть настройки по умолчанию, где я определяю кучу переменных, таких как

let a="a", b="b", c="c", d="d", ...

, и я получил многомерный массив (as string), который использует эти переменные в качестве значений, таких как...

let matrixString = // (typeof matrixString === "string")
 `[
    [a, b, c, d, a],
    [b, b, c, d, a],
    [c, c, a, a, d]
  ]` 

... и я хотел бы разобрать эту строку, используя "JSON.parse()", чтобы получить вещественный массив из строка но похоже, что есть проблема при разборе строки с переменными внутри, потому что я получаю сообщение об ошибке

JSON Parse error: Unexpected identifier "a"

Пожалуйста, посмотрите на мой пример:

/* ** default setup ** */
let a="a", b="b", c="c", d="d";
let matrix =  [
  [a, b, c, d, a],
  [b, b, c, d, a],
  [c, c, a, a, d]
]

console.log(matrix)



/* ** here is the issue ** */
let matrixAsString = `[
                        [a, b, c, d, a],
                        [b, b, c, d, a],
                        [c, c, a, a, d]
                      ]`;
try {
  let parsedMatrix = JSON.parse(matrixAsString)
  console.log(parsedMatrix)
} catch(error) {
  // error = 'JSON Parse error: Unexpected identifier "a"'
  console.log(`Error: ${error}`) 
}

Как это исправить, не используя обходной путь, такой как отображение строки и добавление "" между или используя "eval()". Есть ли метод?

1 Ответ

0 голосов
/ 23 сентября 2018

Вы не можете использовать JSON.parse(), если у вас нет JSON для анализа в первую очередь.Если вам нужно более свободное определение JSON для работы, рассмотрите что-то вроде https://www.npmjs.com/package/really-relaxed-json.

В этом случае, однако, то, что вы ищете, может быть литералами шаблона :

/* ** default setup ** */
let a="1", b="2", c="3", d="4";
let matrix =  [
  [a, b, c, d, a],
  [b, b, c, d, a],
  [c, c, a, a, d]
]

console.log(matrix)

let matrixAsTemplateLiteral = `[
                        [${a}, ${b}, ${c}, ${d}, ${a}],
                        [${b}, ${b}, ${c}, ${d}, ${a}],
                        [${c}, ${c}, ${a}, ${a}, ${d}]
                      ]`;
console.log(matrixAsTemplateLiteral);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...