The OpenNET Project / Index page

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



"Релиз языка программирования PHP 8.0"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для слежения за появлением новых сообщений в нити, нажмите "Проследить за развитием треда".
. "Релиз языка программирования PHP 8.0" +/
Сообщение от Аноним (223), 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) или "в голове" (код разбора). И наверное лучше напрячься и формализовать ее "на бумаге", а потом корректировать в процессе эволюции. Но конечно это лениво.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Релиз языка программирования PHP 8.0, opennews, 26-Ноя-20, 18:15  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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