2015-06-29 5 views
1

Я получаю строку, которая выглядит следующим образомпреобразование строки в строковой JSON

"{option:{name:angshu,title:guha}}" 

Теперь я должен сделать правильную строку JSON из этого. Есть ли какой-нибудь умный способ его преобразования. Я пробовал со струнным handelling, но это требует много условий, которые все еще зависят от конкретного случая. Даже я пытался с eval(), что тоже не работает.

+1

вы имели в виду объект JSON? Если да, то используйте JSON.parse ("{option: {name: angshu, title: guha}}") – nikhil

+0

_ Есть ли какой-либо умный способ для преобразования that_ -> Исправить код сервера, чтобы отправить действительную строку JSON. – Andreas

+0

@Andreas Gotta согласен. Я столкнулся с преобразованием объектов JSON браузера в плоскую строку для отправки на сервер, но никогда не вижу серверов, возвращающих объекты JSON в виде плоских строк! – Gideon

ответ

3

Это регулярное выражение будет делать трюк за предоставленный пример строки:

/:([^{},]+)/g 

Regex101 analysis of it:

: matches the character : literally 
1st Capturing group ([^{},]+) 
    [^{,}]+ match a single character not present in the list below 
     Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
     {}, a single character in the list {}, literally 
g modifier: global. All matches (don't return on first match) 

В основном, он ищет все символы, следующие за :, которые не являются {},. эти «слова» сохраняются в первой группе захвата, которая позволяет .replace повторно использовать их с $1.

Вы можете использовать регулярное выражение как это:

var raw = "{option:{name:angshu,title:guha}}", 
 
    regex = /:([^{,}]+)/g, 
 
    replacement = ':"$1"'; 
 

 
var jsonString = raw.replace(regex, replacement); 
 

 
alert(jsonString);

+0

Превосходный чувак. Это спасает мой день. :) –

+0

Добро пожаловать. Однако имейте в виду, что этот _will_ ломается, когда ваша строка содержит один из этих символов '{},'. Регулярное выражение далека от бомбоустойчивости. – Cerbrus

-3

попробовать это, если вы ищете объект JSON

string inputString = '{option:{name:angshu,title:guha}}'; 
var obj = JSON.parse(inputString); 
+2

Сам JSON недействителен, я не думаю, что вы можете его разобрать. – RvdK

+0

Почему это происходит? Это не будет работать, потому что строка недействительна JSON, что является причиной того, что OP задал этот вопрос в первую очередь. – Cerbrus

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