26.01.2015, 03:13
|
Новичок на форуме
|
|
Регистрация: 26.01.2015
Сообщений: 6
|
|
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}]", устраняется заменой \" на \' или просто ', но это тоже не вариант, т.к. конфиг в последствии тоже нужно парсить.
|
|
26.01.2015, 03:56
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Зачем у тебя конфиг идет строкой? Передавай
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]
и не надо ничего городить.
__________________
В личку только с интересными предложениями
|
|
26.01.2015, 05:07
|
Новичок на форуме
|
|
Регистрация: 26.01.2015
Сообщений: 6
|
|
Сообщение от danik.js
|
Зачем у тебя конфиг идет строкой? Передавай
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]
и не надо ничего городить.
|
Потому что конфиг хранится в базе данных в виде строки, итоговая строка формируется на сервере JSONDataConnector-ом, там отредактировать строку у меня не очень вышло, более того ваш вариант тоже не хочет парситься:
JSON.parse("[{"id":"main_table_dff","config":{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]")
Uncaught SyntaxError: Unexpected identifier
Последний раз редактировалось Amadey15, 26.01.2015 в 05:10.
|
|
26.01.2015, 05:15
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Amadey15
|
JSONDataConnector
|
Не знаю че это. Но думаю это косяк. И исправлять его лучше на сервере, а клиенту подать уже готовое блюдо.
Сообщение от Amadey15
|
тоже не хочет парситься
|
Я вручную правил, допустил ошибку - скобок закрывающих чета много )
__________________
В личку только с интересными предложениями
|
|
26.01.2015, 05:35
|
Новичок на форуме
|
|
Регистрация: 26.01.2015
Сообщений: 6
|
|
Скобки все на месте, JSONDataConector - не думаю что на столько плох, да и разбирать конфиг на сервере будет куда сложнее и дольше чем распарсенный на клиенте, да и нет гарантии что клиент сможет правильно распарсить отредактированную на сервере строку (ваш пример верный и онлайн парсеры очень даже хорошо его парсят, но JSON.parser не справляется).
Может есть другие парсеры для JS? В том что эту строку реально правильно распарсить я не сомневаюсь, как пример могу привести datatable из библиотеки webix, он без проблем обрабатывает подобные запросы сформированные JSONDataConector-ом, вот только его встроенный парсер я не нашёл.
|
|
26.01.2015, 06:02
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Строка отлично парсится. Надо только уяснить как работает экранирование в строках:
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), то разумеется двойных слэшей ты не увидишь.
В общем, либо ты неправильно проверяешь, либо у тебя на сервере формируешь строку неправильным путем.
__________________
В личку только с интересными предложениями
|
|
26.01.2015, 06:04
|
Новичок на форуме
|
|
Регистрация: 26.01.2015
Сообщений: 6
|
|
Немного поменяю вопрос: Как распарсить строку:
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]
Эту строку получить из строки в первом сообщении не сложно, проблема в том что JSON.parse даже с ней не справляется, хотя всего один валидатор из 8 первых выданных гуглом, забраковал строку:
Цитата:
|
{
"valid": false,
"critical": "Invalid JSON - not an an object object"
}
|
|
|
26.01.2015, 06:07
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Amadey15
|
JSON.parse даже с ней не справляется
|
Нех пиздеть!
var data = '[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]'
alert(JSON.parse(data))
И вобще - че за бред - справляется, не справляется? Есть спецификация JSON. Если текст соответствует специкации - он будет без проблем распарсен. Если в нем ошибки - тут уж извиняй, ты сам виноват..
__________________
В личку только с интересными предложениями
|
|
26.01.2015, 06:08
|
Новичок на форуме
|
|
Регистрация: 26.01.2015
Сообщений: 6
|
|
каким браузером вы пользуетесь? Хром и яндекс выдают [object Object]
|
|
26.01.2015, 06:10
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Amadey15
|
каким браузером вы пользуетесь?
|
Какая разница? Браузером, в котором есть объект JSON. Выдает, естественно [object Object] - результат приведения к строке через вызовы [{}.toString()].toString() :
alert([{}.toString()].toString())
__________________
В личку только с интересными предложениями
|
|
|
|