2013-09-13 5 views
31

Почему каждый раз, когда я делаю: -JSON.parse неожиданного маркер ы

JSON.parse('"something"') 

это просто разбирает хорошо, но когда я делаю: -

var m = "something"; 
JSON.parse(m); 

это дает мне ошибку говоря: -

Unexpected token s 
+3

«что-то» недействительно JSON (он не включает цитаты). – bfavaretto

+0

@SLaks анализируют его как обычную строку, но из всех ответов строковый литерал не является допустимым JSONstring. – shriek

+0

Это уже строка. Нечего разбирать. – SLaks

ответ

52

Вы просите его разобрать текст JSON something (не "something"). Это недопустимо JSON, строки должны быть в двойных кавычках.

Если вы хотите эквивалент первого примера:

var s = '"something"'; 
var result = JSON.parse(s); 
+1

Отметить это как верное из-за примера. – shriek

+0

, который работает, но я думал, что JS допускает одиночные и двойные кавычки без предубеждений. Полезно знать. – reabow

+0

@reabow: JavaScript позволяет использовать одиночные или двойные кавычки. JSON этого не делает. –

1

Поскольку JSON имеет строковый тип данных (это практически ничего между " и "). Он не имеет типа данных, который соответствует something

14

Что вы передаете методу JSON.parse должен быть корректным JSON после удаления оберточной кавычки строки.

так something не является действительным JSON, но "something" есть.

действительный JSON является -

JSON = null 
    /* boolean literal */ 
    or true or false 
    /* A JavaScript Number Leading zeroes are prohibited; a decimal point must be followed by at least one digit.*/ 
    or JSONNumber 
    /* Only a limited sets of characters may be escaped; certain control characters are prohibited; the Unicode line separator (U+2028) and paragraph separator (U+2029) characters are permitted; strings must be double-quoted.*/ 
    or JSONString 

    /* Property names must be double-quoted strings; trailing commas are forbidden. */ 
    or JSONObject 
    or JSONArray 

Примеры -

JSON.parse('{}'); // {} 
JSON.parse('true'); // true 
JSON.parse('"foo"'); // "foo" 
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] 
JSON.parse('null'); // null 
JSON.parse("'foo'"); // error since string should be wrapped by double quotes 

Вы можете посмотреть JSON.

+0

Это полезно. Спасибо. – shriek

Смежные вопросы