Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2015, 03:13
Новичок на форуме
Отправить личное сообщение для Amadey15 Посмотреть профиль Найти все сообщения от Amadey15
 
Регистрация: 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}]", устраняется заменой \" на \' или просто ', но это тоже не вариант, т.к. конфиг в последствии тоже нужно парсить.
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2015, 03:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Зачем у тебя конфиг идет строкой? Передавай
[{"id":"main_table_dff","config":[{"meta_key": "ewe", "name": "rdsg", "type": 1}]}]
и не надо ничего городить.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2015, 05:07
Новичок на форуме
Отправить личное сообщение для Amadey15 Посмотреть профиль Найти все сообщения от Amadey15
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 26.01.2015, 05:15
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Amadey15
JSONDataConnector
Не знаю че это. Но думаю это косяк. И исправлять его лучше на сервере, а клиенту подать уже готовое блюдо.
Сообщение от Amadey15
тоже не хочет парситься
Я вручную правил, допустил ошибку - скобок закрывающих чета много )
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 26.01.2015, 05:35
Новичок на форуме
Отправить личное сообщение для Amadey15 Посмотреть профиль Найти все сообщения от Amadey15
 
Регистрация: 26.01.2015
Сообщений: 6

Скобки все на месте,JSONDataConector - не думаю что на столько плох, да и разбирать конфиг на сервере будет куда сложнее и дольше чем распарсенный на клиенте, да и нет гарантии что клиент сможет правильно распарсить отредактированную на сервере строку (ваш пример верный и онлайн парсеры очень даже хорошо его парсят, но JSON.parser не справляется).
Может есть другие парсеры для JS? В том что эту строку реально правильно распарсить я не сомневаюсь, как пример могу привести datatable из библиотеки webix, он без проблем обрабатывает подобные запросы сформированные JSONDataConector-ом, вот только его встроенный парсер я не нашёл.
Ответить с цитированием
  #6 (permalink)  
Старый 26.01.2015, 06:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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), то разумеется двойных слэшей ты не увидишь.

В общем, либо ты неправильно проверяешь, либо у тебя на сервере формируешь строку неправильным путем.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 26.01.2015, 06:04
Новичок на форуме
Отправить личное сообщение для Amadey15 Посмотреть профиль Найти все сообщения от Amadey15
 
Регистрация: 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"
}
Ответить с цитированием
  #8 (permalink)  
Старый 26.01.2015, 06:07
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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. Если текст соответствует специкации - он будет без проблем распарсен. Если в нем ошибки - тут уж извиняй, ты сам виноват..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 26.01.2015, 06:08
Новичок на форуме
Отправить личное сообщение для Amadey15 Посмотреть профиль Найти все сообщения от Amadey15
 
Регистрация: 26.01.2015
Сообщений: 6

каким браузером вы пользуетесь? Хром и яндекс выдают [object Object]
Ответить с цитированием
  #10 (permalink)  
Старый 26.01.2015, 06:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Amadey15
каким браузером вы пользуетесь?
Какая разница? Браузером, в котором есть объект JSON. Выдает, естественно [object Object] - результат приведения к строке через вызовы [{}.toString()].toString() :
alert([{}.toString()].toString())
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON.parse и html кодированный json_encode _axl AJAX и COMET 6 30.06.2011 13:03
Не парсит данные. alexKniaz AJAX и COMET 12 01.11.2008 21:09