API JSON в структуру

1. shell_maxim 42 19.10.20 06:02 Сейчас в теме
Всем привет!

Начал работать с Битрикс24 API и столкнулся с проблемой чтения JSON.
С JSON работаю не много, но всегда чтение из строки проходит без проблем.

Из-за ограничений к формату ключа в 1С выявил пока 2 основные проблемы:

1. ключ не должен содержать "."
"edit.originator": true,
"checklist.reorder": true,
"elapsedtime.add": true,
"dayplan.timer.toggle": false,
"edit.plan": true,
"checklist.add": true,
"favorite.add": true,
"favorite.delete": false

решил простой заменой "." на "йй" перед чтением и обратная замена в значении после разбора структуры.

2. ключ не должен начинаться с цифры
"checklist": {
"120": {
"id": "120",
"taskId": "858",
"createdBy": "34",
"parentId": "118",

и вот тут затык.

Вот так postman прочитал:
{
    "result": {
        "task": {
            "id": "858",
            "parentId": null,
            "title": "Облучатели с wifi управлением",
            "description": "Первичные задачи:\r\n1. Доработать Управление, что бы можно было устанавливать время работы и видеть обратный отсчет времени.\r\n2. Определиться с основными комплектующими\r\n3. Сформировать КП для клиентов\r\n\r\n",
            "mark": "",
            "priority": "0",
            "status": "3",
            "multitask": "N",
            "notViewed": "N",
            "replicate": "N",
            "groupId": "0",
            "stageId": "0",
            "createdBy": "1",
            "createdDate": "2020-05-31T13:13:32+07:00",
            "responsibleId": "1",
            "changedBy": "1",
            "changedDate": "2020-10-01T14:50:26+07:00",
            "statusChangedBy": "1",
            "statusChangedDate": "2020-07-31T20:36:50+07:00",
            "closedBy": null,
            "closedDate": null,
            "activityDate": "2020-10-11T19:02:28+07:00",
            "dateStart": "2020-07-31T20:36:50+07:00",
            "deadline": "2020-10-11T19:00:00+07:00",
            "startDatePlan": null,
            "endDatePlan": null,
            "guid": "{69631153-d903-4770-b7f5-1820a311c4cb}",
            "xmlId": null,
            "commentsCount": "56",
            "allowChangeDeadline": "Y",
            "taskControl": "N",
            "addInReport": "N",
            "forkedByTemplateId": null,
            "timeEstimate": "0",
            "timeSpentInLogs": null,
            "matchWorkTime": "N",
            "forumTopicId": "328",
            "forumId": "11",
            "siteId": "s1",
            "subordinate": "N",
            "favorite": "N",
            "exchangeModified": null,
            "exchangeId": null,
            "outlookVersion": "12",
            "viewedDate": "2020-10-15T10:27:57+07:00",
            "sorting": "-38912.0000000",
            "durationPlan": "0",
            "durationFact": null,
            "durationType": "days",
            "isMuted": "N",
            "isPinned": "N",
            "descriptionInBbcode": "Y",
            "ufCrmTask": false,
            "ufTaskWebdavFiles": [],
            "ufMailMessage": null,
            "auditors": [
                "6",
                "8"
            ],
            "accomplices": [
                "14",
                "18",
                "28",
                "32",
                "34"
            ],
            "checklist": {
                "120": {
                    "id": "120",
                    "taskId": "858",
                    "createdBy": "34",
                    "parentId": "118",
                    "title": "Прошивка",
                    "sortIndex": "0",
                    "isComplete": "Y",
                    "isImportant": "N",
                    "toggledBy": "34",
                    "toggledDate": "2020-08-19T09:25:03+03:00",
                    "ufChecklistFiles": false,
                    "members": [],
                    "attachments": [],
                    "entityId": "858"
                },
                "118": {
                    "id": "118",
                    "taskId": "858",
                    "createdBy": "34",
                    "parentId": 0,
                    "title": "Чек-лист 1",
                    "sortIndex": "0",
                    "isComplete": "Y",
                    "isImportant": "N",
                    "toggledBy": "34",
                    "toggledDate": "2020-08-31T11:47:05+03:00",
                    "ufChecklistFiles": false,
                    "members": [],
                    "attachments": [],
                    "entityId": "858"
                },
                "122": {
                    "id": "122",
                    "taskId": "858",
                    "createdBy": "34",
                    "parentId": "118",
                    "title": "Мобильное приложение",
                    "sortIndex": "1",
                    "isComplete": "Y",
                    "isImportant": "N",
                    "toggledBy": "34",
                    "toggledDate": "2020-08-19T09:25:04+03:00",
                    "ufChecklistFiles": false,
                    "members": [],
                    "attachments": [],
                    "entityId": "858"
                },
                "124": {
                    "id": "124",
                    "taskId": "858",
                    "createdBy": "34",
                    "parentId": "118",
                    "title": "Образец",
                    "sortIndex": "2",
                    "isComplete": "Y",
                    "isImportant": "N",
                    "toggledBy": "34",
                    "toggledDate": "2020-08-25T14:19:02+03:00",
                    "ufChecklistFiles": false,
                    "members": [],
                    "attachments": [],
                    "entityId": "858"
                }
            },
            "group": [],
            "creator": {
                "id": "1",
                "name": "Барковец Владимир",
                "link": "/company/personal/user/1/",
                "icon": "/bitrix/images/tasks/default_avatar.png"
            },
            "responsible": {
                "id": "1",
                "name": "Барковец Владимир",
                "link": "/company/personal/user/1/",
                "icon": "/bitrix/images/tasks/default_avatar.png"
            },
            "newCommentsCount": 0,
            "action": {
                "accept": false,
                "decline": false,
                "complete": true,
                "approve": false,
                "disapprove": false,
                "start": false,
                "pause": true,
                "delegate": true,
                "remove": true,
                "edit": true,
                "defer": false,
                "renew": false,
                "create": true,
                "changeDeadline": true,
                "checklistAddItems": true,
                "addFavorite": true,
                "deleteFavorite": false,
                "rate": true,
                "edit.originator": true,
                "checklist.reorder": true,
                "elapsedtime.add": true,
                "dayplan.timer.toggle": false,
                "edit.plan": true,
                "checklist.add": true,
                "favorite.add": true,
                "favorite.delete": false
            }
        }
    },
    "time": {
        "start": 1603074542.0486109,
        "finish": 1603074542.2681241,
        "duration": 0.2195131778717041,
        "processing": 0.084923028945922852,
        "date_start": "2020-10-19T05:29:02+03:00",
        "date_finish": "2020-10-19T05:29:02+03:00"
    }
}
Показать


Исходник(не очень удобно читать):
{"result":{"task":{"id":"858","parentId":null,"title":"\u041e\u0431\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u0441 wifi \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c","description":"\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:\r\n1. \u0414\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043e\u0442\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.\r\n2. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0443\u044e\u0449\u0438\u043c\u0438\r\n3. \u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041a\u041f \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432\r\n\r\n","mark":"","priority":"0","status":"3","multitask":"N","notViewed":"N","replicate":"N","groupId":"0","stageId":"0","createdBy":"1","createdDate":"2020-05-31T13:13:32+07:00","responsibleId":"1","changedBy":"1","changedDate":"2020-10-01T14:50:26+07:00","statusChangedBy":"1","statusChangedDate":"2020-07-31T20:36:50+07:00","closedBy":null,"closedDate":null,"activityDate":"2020-10-11T19:02:28+07:00","dateStart":"2020-07-31T20:36:50+07:00","deadline":"2020-10-11T19:00:00+07:00","startDatePlan":null,"endDatePlan":null,"guid":"{69631153-d903-4770-b7f5-1820a311c4cb}","xmlId":null,"commentsCount":"56","allowChangeDeadline":"Y","taskControl":"N","addInReport":"N","forkedByTemplateId":null,"timeEstimate":"0","timeSpentInLogs":null,"matchWorkTime":"N","forumTopicId":"328","forumId":"11","siteId":"s1","subordinate":"N","favorite":"N","exchangeModified":null,"exchangeId":null,"outlookVersion":"12","viewedDate":"2020-10-15T10:27:57+07:00","sorting":"-38912.0000000","durationPlan":"0","durationFact":null,"durationType":"days","isMuted":"N","isPinned":"N","descriptionInBbcode":"Y","ufCrmTask":false,"ufTaskWebdavFiles":[],"ufMailMessage":null,"auditors":["6","8"],"accomplices":["14","18","28","32","34"],"checklist":{"120":{"id":"120","taskId":"858","createdBy":"34","parentId":"118","title":"\u041f\u0440\u043e\u0448\u0438\u0432\u043a\u0430","sortIndex":"0","isComplete":"Y","isImportant":"N","toggledBy":"34","toggledDate":"2020-08-19T09:25:03+03:00","ufChecklistFiles":false,"members":[],"attachments":[],"entityId":"858"},"118":{"id":"118","taskId":"858","createdBy":"34","parentId":0,"title":"\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 1","sortIndex":"0","isComplete":"Y","isImportant":"N","toggledBy":"34","toggledDate":"2020-08-31T11:47:05+03:00","ufChecklistFiles":false,"members":[],"attachments":[],"entityId":"858"},"122":{"id":"122","taskId":"858","createdBy":"34","parentId":"118","title":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435","sortIndex":"1","isComplete":"Y","isImportant":"N","toggledBy":"34","toggledDate":"2020-08-19T09:25:04+03:00","ufChecklistFiles":false,"members":[],"attachments":[],"entityId":"858"},"124":{"id":"124","taskId":"858","createdBy":"34","parentId":"118","title":"\u041e\u0431\u0440\u0430\u0437\u0435\u0446","sortIndex":"2","isComplete":"Y","isImportant":"N","toggledBy":"34","toggledDate":"2020-08-25T14:19:02+03:00","ufChecklistFiles":false,"members":[],"attachments":[],"entityId":"858"}},"group":[],"creator":{"id":"1","name":"\u0411\u0430\u0440\u043a\u043e\u0432\u0435\u0446 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440","link":"\/company\/personal\/user\/1\/","icon":"\/bitrix\/images\/tasks\/default_avatar.png"},"responsible":{"id":"1","name":"\u0411\u0430\u0440\u043a\u043e\u0432\u0435\u0446 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440","link":"\/company\/personal\/user\/1\/","icon":"\/bitrix\/images\/tasks\/default_avatar.png"},"newCommentsCount":0,"action":{"accept":false,"decline":false,"complete":true,"approve":false,"disapprove":false,"start":false,"pause":true,"delegate":true,"remove":true,"edit":true,"defer":false,"renew":false,"create":true,"changeDeadline":true,"checklistAddItems":true,"addFavorite":true,"deleteFavorite":false,"rate":true,"edit.originator":true,"checklist.reorder":true,"elapsedtime.add":true,"dayplan.timer.toggle":false,"edit.plan":true,"checklist.add":true,"favorite.add":true,"favorite.delete":false}}},"time":{"start":1603074542.0486109,"finish":1603074542.2681241,"duration":0.2195131778717041,"processing":0.084923028945922852,"date_start":"2020-10-19T05:29:02+03:00","date_finish":"2020-10-19T05:29:02+03:00"}}
По теме из базы знаний
Найденные решения
2. spacecraft 19.10.20 06:10 Сейчас в теме
(1) используйте соответствие вместо структуры.
shell_maxim; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 19.10.20 06:10 Сейчас в теме
(1) используйте соответствие вместо структуры.
shell_maxim; +1 Ответить
3. shell_maxim 42 19.10.20 06:16 Сейчас в теме
(2)"Непредвиденный символ при чтении JSON"
4. spacecraft 19.10.20 06:22 Сейчас в теме
(3) это к чему? Это ошибка при чтении в соответствие?
Из СП:

ПрочитатьJSON(<ЧтениеJSON>, <ПрочитатьВСоответствие>, <ИменаСвойствСоЗначениямиДата>, <ОжидаемыйФорматДаты>, <ИмяФункцииВосстановления>, <МодульФункцииВосстановления>, <ДополнительныеПараметрыФункцииВосстановления>, <ИменаСвойствДляОбработкиВосстановления>, <МаксимальнаяВложенность>)

При установке параметра ПрочитатьВСоответствие в Истина, будет парсинг в соответствие, которое не имеет ограничений на название ключа.
5. shell_maxim 42 19.10.20 06:24 Сейчас в теме
(4) ПрочитатьJSON(ЧтениеJSON,Истина);

и вот ошибка "Непредвиденный символ при чтении JSON"

Не пишет что именно не так
6. spacecraft 19.10.20 06:26 Сейчас в теме
(5) тогда у вас "битый" текст формата. Разбирайтесь уже с этим.
8. shell_maxim 42 19.10.20 06:41 Сейчас в теме
(6) Спасибо, действительно мой косяк. Сделав замену точек получал ошибку. Забыл это убрать.
На чистом исходнике все получилось. Еще раз спасибо.
7. spacecraft 19.10.20 06:33 Сейчас в теме
(5) попробуйте проверить полученную строку ответа в онлайн проверки json.
Их много.
shell_maxim; +1 Ответить
9. shell_maxim 42 19.10.20 06:43 Сейчас в теме
(7) Кстати, онлайн то проглотил все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот