Как мне преобразовать следующее в действительный JSON? - PullRequest
0 голосов
/ 17 июня 2019

Учитывая

var test = '{key1: "val1", data:{ key2: "val2", key3: "val3" }}' => returned by third party library 

expectedOutput = {key1: "val1", data:{ key2: "val2", key3: "val3" }}

Я пытался JSON.parse (test) => выдает ошибку Я пытался JSON.parse (JSON.stringify (test)) => возвращает ошибку результатов двойного анализа строки.

Чего мне не хватает?

Как получить JSON, а не строку при разборе?

Ответы [ 5 ]

1 голос
/ 17 июня 2019

вам, вероятно, нужно процитировать ваши ключи:

var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'

Не все, но многие JSON-парсеры ожидают, что ключи будут заключены в кавычки

0 голосов
/ 17 июня 2019

Если вы застряли в этой библиотеке, возвращающей то, что выглядит как значение JavaScript в строке, вы можете использовать JavaScript eval(), например:

# nominal return value -- valid JavaScript in a string (that isn't JSON) 
var rval_str = '{key1: "val1", data:{ key2: "val2", key3: "val3" }}'
# use eval() to 'decode' rval_str
eval("rval = " + rval_str)
rval

дает

{key1: "val1", data:{ key2: "val2", key3: "val3" }}

Конечно, это очень рискованно (используя eval), если вы не доверяете тому, что возвращает библиотека.

0 голосов
/ 17 июня 2019

На ваш вопрос: как мне получить действительный JSON для начала?

Я говорю ... используйте JSON.stringify().

То есть, если вы только изучаете JSON (кажетсякак вы), затем используйте JSON.stringify() в качестве учебного пособия.

В вашей консоли введите:

obj = {key1: "val1", data:{ key2: "val2", key3: "val3" }}
JSON.stringify(obj)

И вы увидите, что результат действителен JSON:

'{"key1":"val1","data":{"key2":"val2","key3":"val3"}}'

Из этого вы можете увидеть, что пропустилидвойные кавычки вокруг клавиш.

0 голосов
/ 17 июня 2019

Добавьте двойные кавычки к ключам, потому что они нужны парсеру -

var test = '{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}'
console.log(JSON.parse(test))
0 голосов
/ 17 июня 2019

Вам не хватает клавиш вокруг клавиш

Неправильно: JSON.parse('{key1: "val1", data:{ key2: "val2", key3: "val3" }}')

Справа: JSON.parse('{"key1": "val1", "data":{ "key2": "val2", "key3": "val3" }}')

...