2013-08-30 7 views
2

У меня есть строка:javascript String to JSON?

a = "{u'a':[u'123',u'321'], u'b':[u'456',u'654']}" 

Я хочу, чтобы преобразовать эту в до JSon данных.

Как это сделать?

Я пробовал JSON.parse(), но это вызовет ошибку.

SyntaxError: Unexpected token u 
+1

Разве это не очевидно? Что это за 'u' перед одинарными кавычками? 'u'a'',' u'b'' и т. д.? 'a =" {'a': ['123', '321'], 'b': ['456', '654']} ";' –

+0

Что такое u? Переменная ? – Dilantha

+1

@ Dilantha: Это префикс для [литерала '' юникода '' Python '' (http://docs.python.org/2/howto/unicode.html). –

ответ

1

В данном конкретном случае, вы можете просто заменить каждый u'x' с "x" и вы будете иметь действительный JSON:

var a = "{u'a':[u'123',u'321'], u'b':[u'456',u'654']}"; 

// Convert to JSON (May not work with other inputs!) 
var json = a.replace(/u'((?:[^'\\]|\\.)*)'/g, function(a,str){ 
    return '"' + str.replace(/\\'/g, '\'').replace(/"/g, '\\"') + '"'; 
}); 

// Parse the JSON into a Javascript object 
var obj = JSON.parse(json); 

Изменено для работы с некоторыми котировками в объекте:

var a = "{u'a':[u'\\'123\\'',u'321'], u'b':[u'456\\\\',u'\"654\"']}"; 

становится:

{a:["'123'","321"], b:["456\",""654""]} 
+0

не будет работать, если строки содержат неэкранированные двойные кавычки, в частности –

+0

да, я попытался это сделать. Как @jandvorak сказал, как обрабатывать одиночные или двойные кавычки? – MarshalSHI

+0

@meshuai Можете ли вы показать в своем вопросе, как выглядит пример с кавычками? – Paulpro

3

Это похоже на литеральный синтаксис Python для меня. Скажите, кто написал часть Python для кодирования как JSON вместо того, чтобы просто выводить структуру как строку.

+1

+1 Это было бы идеальным решением. – Paulpro

+0

Да. Это лучший способ. ;) – MarshalSHI

-1

JSON должен содержать только строки.

a = "{u'a':[u'123',u'321'], u'b':[u'456',u'654']}"

Здесь я могу только предположить, что u является переменной. Измените его следующим образом:

a = "{"+u+"'a':["+u+"'123',"+u+"'321'], "+u+"'b':["+u+"'456',"+u+"'654']}"

+1

Интересно, что вы так думали. Я предположил, что это префикс строки и должен быть опущен. –

+0

Его возможно. Префикс может быть включен в строку. Только причина не была бы, если бы это была переменная. – Aashray

+0

Даже если ваша интерпретация была правильной, 'a' все еще недействителен JSON. Это даже не действительный код Javascript –

0

Вам нужно изменить строку ввода в допустимую строку JSON.

Я думаю, что это то, что вы хотите:

JSON.parse('{"a":["123","321"], "b":["456","654"]}')

-1

Переменные (ключи/значения) являются строки, так должны быть в кавычках, чтобы быть разобрано как действительный JSON.

// помещаем цитаты вокруг пар ключ/значение.

var a = "{\"u'a'\":[\"u'123'\",\"u'321'\"], \"u'b'\":[\"u'456'\",\"u'654'\"]}"; 

JQuery

a = $.parseJSON(a); 
+0

как? Если «на сервере», почему? Почему бы сразу не выводить правильный JSON? –

+1

также, зачем использовать '$ .parseJSON' вместо' JSON.parse'? [Вам нужно поддерживать IE7?] (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FJSON) Что еще более важно, кто сказал, что jQuery доступен? –

+0

@JanDvorak К вашему первому вопросу, вы должны спросить OP это. Я просто намекнул, что пары ключ/значение должны быть в кавычках. По второму вопросу вы будете использовать 'eval' вместо? Если не jquery, вам нужно будет использовать 'json.js'. Выбирайте. Я не хочу отвечать на некоторые риторические вопросы, это вопрос выбора, мой не обязательно должен быть таким же, как ваш. –