The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз языка программирования PHP 8.0"
Отправлено Аноним, 27-Ноя-20 12:06 
> Задача-то простая: взять произвольный JSON. Разобрать. Проверить наличие конкретных полей. Свалидировать эти поля по заданной как раз таки схеме - и вот тут внимание - части полей может не быть или они могут менять свой тип в зависимости от наличия других полей. Нет у JSON строгой схемы.

В каждом слове ложь и передергивание. Когда Вы приступаете к разбору, Вы берете не произвольный JSON, вы знаете откуда он и, зная источник, ожидаете какие-то конкретные поля в каких-то определенных уровнях вложенности и определенного типа. Ну Вы в поле "birthday" объекта "boss" в объекте "company" будете ждать какую-то дату в каком-то формате, а не строку "Вася", причем поле "birthday" Вы же будете искать не простым поиском текста по всей json-строке, потому что там может быть такое же поле и у объекта "главбух". Это и есть схема. И делая подряд три запроса этого JSON из одного источника Вы не получите в штатном режиме три разных формата содержимого поля "birthday" (unix-time число, строку с UTC, строку с датой прописью на суахили). Даже если у Вас эта схема не описана, не формализована в виде JSON Schema (аналог XML Schema), то она существует в Вашей голове и коде, принимающем и обрабатывающем этот объект. И да, части полей может не быть, это давно работает в любых "строгих схемах" - поле может быть отмечено как обязательное или не обязательное, во всяких библиотеках сериализации/биндингов всё это работает автоматически. А вот СМЕНА ТИПА одного и того же поля ИЗ ОДНОГО И ТОГО ЖЕ источника json-данных в зависимости от наличия других полей - это фантастика, нонсенс или очень редкое и фатальное невезение в такое вляпаться. Ни разу с таким не сталкивался, а пришлось интегрировать в местную г..носистему 14 внешних платежных сервисов (форматы CSV, XML, JSON) и взаимодействие с местными системами. Когда что-то менялось во внешней системе, то естественно приходилось менять код разбора на нашей стороне и нет, простое изменение типа со строки на число или обратно там ни разу не происходило, обычно менялась структура или добавлялись/удалялись поля. Но если Вы сделали разбор различающихся json-данных (даже немного, даже одним полем или типом одного и того же поля) из разных источников в "одной функции" - Вы ССЗБ.

Так что у JSON есть строгая схема, "на бумаге" (JSON Schema) или "в голове" (код разбора). И наверное лучше напрячься и формализовать ее "на бумаге", а потом корректировать в процессе эволюции. Но конечно это лениво.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру