Как справиться с передачей многоуровнего json от пхп к фронту?
Сценарий подбирает с базы несколько записей с несколькими столбцами, среди которых есть числовые, строковые и, что главное, json-строковые. Все это нужно передать на фронт. Передать пытаюсь "глобальным" жсоном - просто собираю все это в один массив с объектами, кодирую, передаю, парсю на клиенте. Ошибка. Это часть пхп-ответа до символа, где остановился парсер:
[{"id":"vgdgtdzktxbn","type":"lesson","url":"lesson?id=vgdgtdzktxbn","hashtags":"[\"\u0432\"]......
'\u0432\' - или, по-русски, 'в'. Конкретно на этом 'в' json-парсер стопится.
Как видно, все кавычки во вложенных жсонах вроде экранированы. Однако если, например, вогнать все это в консоль, экранирование автоматически снимается. И скорее всего, оно также автоматически снимается при парсинге в самом скрипте, потому что, как я понял, функция попросту сталкивается с "неэкранированной" кавычкой и не знает, что за "в" там стоит дальше.
Как в этой ситуации быть? Мусолить json на стороне сервера, пытаться все перевести в объекты/массивы, а потом все вместе закодировать, разумеется, не вариант. Я прикрепил только часть ответа, там дальше есть и может быть - много всего, это слишком для серверной синтаксической обработки.
Что интересно, все было в порядке, когда делалось на node.js. Так же отправлял с сервера большой жсон с жсонами поменьше, парсил на клиенте - все отлично шло дальше. Только вот, к сожалению, ноду не получилось поставить на хостинге - недостаточно прав для разверстки...
Ответы (1 шт):
Проблема решилась хоть и, наверное, костыльно - я повторно экранировал уже экранированные кавычки в главном жсоне на стороне сервера.
str_replace('\"', '\\\"', json_encode(objectWithJSONProperties))
Клиент автоматически первично деэкранировал кавычки
[{"id":"vgdgtdzktxbn","type":"lesson","url":"lesson?id=vgdgtdzktxbn","hashtags":"[\\"\u0432\\"]......
А потом - простой парсинг средствами js. Парсер, как и должен был, игнорирует экранированные кавычки, притом преобразовывая их в обычные. В итоге получается объект с валидным json в свойствах. И это странное решение стоило суток...