JSON.parse не парсит
Всем доброго времени суток, не могу распарсить строку:
[{"id":"main_table_dff","config":"[{\"meta_key\": \"ewe\", \"name\": \"rdsg\", \"type\": 1}]"}] Онлайн парсеры справляются с ней без проблем. Можете подсказать как её изменить что бы правильно распарсить? Строка приходит с сервера через AJAX и формируется JSONConector-ом, config берётся с БД, так что поменять строку на сервере хлопотно и лучше менять из этой средствами js. Ошибка возникает из-за "config":"[{\"meta_key\": \"ewe\", \"name\": \"rdsg\", \"type\": 1}]", устраняется заменой \" на \' или просто ', но это тоже не вариант, т.к. конфиг в последствии тоже нужно парсить. |
Зачем у тебя конфиг идет строкой? Передавай
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]и не надо ничего городить. |
Цитата:
JSON.parse("[{"id":"main_table_dff","config":{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]") Uncaught SyntaxError: Unexpected identifier |
Цитата:
Цитата:
|
Скобки все на месте,JSONDataConector - не думаю что на столько плох, да и разбирать конфиг на сервере будет куда сложнее и дольше чем распарсенный на клиенте, да и нет гарантии что клиент сможет правильно распарсить отредактированную на сервере строку (ваш пример верный и онлайн парсеры очень даже хорошо его парсят, но JSON.parser не справляется).
Может есть другие парсеры для JS? В том что эту строку реально правильно распарсить я не сомневаюсь, как пример могу привести datatable из библиотеки webix, он без проблем обрабатывает подобные запросы сформированные JSONDataConector-ом, вот только его встроенный парсер я не нашёл. |
Строка отлично парсится. Надо только уяснить как работает экранирование в строках:
var data = '[{"id":"main_table_dff","config":"[{\\"meta_key\\": \\"ewe\\", \\"name\\": \\"rdsg\\", \\"type\\": 1}]"}]' alert(JSON.parse(data)) config - это строка с двойными кавычками, поэтому все двойные кавычки внутри нее нам надо экранировать слэшем. Однако эта строка у нас записана внутри другой строки - data, c одиночными кавычками. И чтобы эта строка (data), не схавала наши слэшы (это ведь спецсимвол), мы его экранируем. Но это только при записи нашей строки в коде. Если сделаешь console.log(data), то разумеется двойных слэшей ты не увидишь. В общем, либо ты неправильно проверяешь, либо у тебя на сервере формируешь строку неправильным путем. |
Немного поменяю вопрос: Как распарсить строку:
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}] Эту строку получить из строки в первом сообщении не сложно, проблема в том что JSON.parse даже с ней не справляется, хотя всего один валидатор из 8 первых выданных гуглом, забраковал строку: Цитата:
|
Цитата:
var data = '[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]' alert(JSON.parse(data)) И вобще - че за бред - справляется, не справляется? Есть спецификация JSON. Если текст соответствует специкации - он будет без проблем распарсен. Если в нем ошибки - тут уж извиняй, ты сам виноват.. |
каким браузером вы пользуетесь? Хром и яндекс выдают [object Object]
|
Цитата:
alert([{}.toString()].toString()) |
Часовой пояс GMT +3, время: 08:30. |