Как сделать строку совместимой с JSON.parse()

В моем приложении, когда я ввожу значение как my"name в текстовое поле, фреймворк создает строку типа (это я не могу контролировать):

"[{\"id\":\"201500000001002\",\"name\":\"my\"name\",\"colorCode\":\"\",\"version\":\"11\",\"nodeOrder\":\"1\"}]"

Теперь эта строка передается методу JSON.parse(), который выдает ошибку из-за неоднозначного поля имени, как

\"имя\":\"мое\"имя\"

var str = JSON.parse("[{\"id\":\"201500000001002\",\"name\":\"my\"name\",\"colorCode\":\"\",\"version\":\"11\",\"nodeOrder\":\"1\"}]")

Это приводит к исключению JSON

Могу ли я что-нибудь сделать со строкой:

"[{\"id\":\"201500000001002\",\"name\":\"my\"name\",\"colorCode\":\"\",\"version\":\"11\",\"nodeOrder\":\"1\"}]"

Чтобы избежать символа двойной кавычки в my " name как my \" name, чтобы сделать его действительным для метода JSON.parse.

Я не могу контролировать строку JSON, я просто передаю имя, поскольку мое имя и структура создают строку, которая передается в JSON.parse()


person quintin    schedule 23.12.2015    source источник
comment
Возможный дубликат строки JSON.parse с кавычками   -  person diziaq    schedule 23.12.2015
comment
Я не контролирую строку JSON, я просто передаю имя, и фреймворк создает его для меня, которым я должен манипулировать перед выполнением JSON.parse()   -  person quintin    schedule 23.12.2015
comment
Мусор на входе - мусор на выходе. Вы или ваша структура не знаете, как экранировать строки. Покажите код — как вы вводите значение и передаете его в этот фреймворк.   -  person Yeldar Kurmangaliyev    schedule 23.12.2015
comment
Я ввожу значение в JSP, которое считывается и преобразуется в строку JSON, не выходя из кода интеллектуальной структуры, который не находится под моим контролем. Так что я могу играть только с экраном результатов [{\id\:\0\,\name\:\\\,\colorCode\:\\,\version\:\0\,\nodeOrder\:\1\} ]   -  person quintin    schedule 23.12.2015
comment
@rjoshi Что выведет, если ввести my\"name, my\name?   -  person Yeldar Kurmangaliyev    schedule 23.12.2015
comment
@Yeldar, тогда он сохраняет имя как мое имя для моего \ имени и такое же исключение во втором случае   -  person quintin    schedule 23.12.2015


Ответы (2)


Прошел серию text замен. Вы можете попробовать это:

var str = "[{\"id\":\"201500000001002\",\"name\":\"my\"name\",\"colorCode\":\"\",\"version\":\"11\",\"nodeOrder\":\"1\"}]";

JSON.parse(
str.replace(/\\/i,"").
replace(/{"/g,"{'").
replace(/":"/g,"':'").
replace(/","/g,"','").
replace(/"}/g,"'}").
replace(/'/g,"\@@@").
replace(/"/g,"\\\"").
replace(/@@@/g,"\"")
);

Он вернет желаемый массив JSON

person Tom Sebastian    schedule 23.12.2015
comment
следующий вывод я получаю [object Object], он не работает - person quintin; 23.12.2015

person    schedule
comment
str.replace ничего не сделает, пока вы не вернете его результат str. Кроме того, это не удастся на примере OP \"name\":\"my\"name\". - person ; 23.12.2015