Имя: Пароль:
1C
1С v8
HTTP сервис: получить JSON структуру из запроса
,
0 AsadRoman
 
15.06.17
09:15
Из мобильного приложения в HTTP сервис приходит запрос.
Получаю и обрабатываю его:

ТелоСтрока = Запрос.ПолучитьТелоКакСтроку();
СтрокаJSON = РаскодироватьСтроку(ТелоСтрока, СпособКодированияСтроки.КодировкаURL);

Получаю строку вида:

report_data={здесь JSON структура}&device_id="некоторое значение"

report_data и device_id могут меняться местами, device_id может отсутствовать.

Есть какой-нибудь универсальный метод выделения JSON структуры из всего этого? Ведь может случиться и так, что появятся еще какие-нибудь добавления.
1 Айболитов
 
15.06.17
09:18
Джейсон = Новый ЧтениеJSON;
        Джейсон.УстановитьСтроку(ТекстОтвета);
        Данные = ПрочитатьJSON(Джейсон);
2 AsadRoman
 
15.06.17
09:19
А все остальное дерьмо само собой обрубится?
3 Айболитов
 
15.06.17
09:22
посмотри для начала. я просто не понял про какое дерьмо ты говоришь))
4 BuHu
 
15.06.17
09:22
5 AsadRoman
 
15.06.17
09:22
не прокатывает
6 Юрий Лазаренко
 
15.06.17
09:26
(0) Ну так разложи строку "report_data={здесь JSON структура}&device_id="некоторое значение"" сначала на пары "параметр-значение" путем разделения по символу "&", а потом эти пары раздели по "=". 5 минут кодинга.
7 Айболитов
 
15.06.17
09:26
(5) какая ошибка?
8 AsadRoman
 
15.06.17
09:28
Т.е. тупо парсить?
9 AsadRoman
 
15.06.17
09:29
В приложение возвращается 500. В отладчике без сообщения на строке
ОтчетыПриложения = ПрочитатьJSON(ЧтениеJSON)

вываливается
10 AsadRoman
 
15.06.17
09:31
А если внутри значений будут символы "=" что делать?
11 Юрий Лазаренко
 
15.06.17
09:33
(10) RegExp юзать
12 zva
 
15.06.17
09:35
(6) Ну разложи report_data={device_id="&",m&m=3}&device_id=3
Нету универсального способа, да и сервис странный - почему все в json не возвращать.
13 Неверный Параметр И
 
15.06.17
09:42
(12) Как всегда, никто не хочет читать RFC.

Надо сначала разбивать строку на ключ значение, хоть регэкспами, хоть руками. Потом к значениям применять урлдекоде. И только потом, из полученного разбирать джейсон.
14 Юрий Лазаренко
 
15.06.17
09:43
(12) Есть неуниверсальный: взять все, что справа от "report_data={", а в нем все, что слева от "}&"
15 Юрий Лазаренко
 
15.06.17
09:44
А так-то (13) прав: до urldecode никаких лишних "=" в запросе не будет.
16 Мимохожий Однако
 
15.06.17
10:53
(8) У метода ПрочитатьJSON() есть несколько параметров. В полученной структуре смотри тип значения и разворачивай.
17 AsadRoman
 
15.06.17
11:35
(12) Я об этом уже пятый месяц разработчику мобильного приложения кричу: дай мне чистый json. Ноль эмоций.
18 AsadRoman
 
15.06.17
11:38
А так-то я Json победил. Просто хотелось что-то универсальное или красивое выделять json. А (14) как-то не очень красиво.
19 Юрий Лазаренко
 
15.06.17
11:46
(18) Ну так делай как сказано в (6). С учетом (13) никаких проблем не будет. В итоге получишь структуру, где ключ - это имя параметра, значение - его значение.
20 AsadRoman
 
15.06.17
11:48
Все понятно. Всем СПАСИБО.