LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Варианты? Вот, хочется впендюрить в строгий статический язык джейсонину из интернета, в которой в принципе может быть что угодно. Это логически самопротиворечивая задача, тут красивого решения не предвидится.

Решение простое и в C# он сделано с помощью dynamic. Парсим JSON в map/array и даём возможность обращаться к нему, как будто это объект с полями.

dynamic user = httpGet(url).json()
return (String) user.name

А вот если в коде уже хочется полновесный объект типа User, тогда да, какой-то маппинг надо делать. Но в общем-то и в динамических языках просто пулять внутрь какой-то непроверенный распарсенный JSON тоже не стоит, там есть свои библиотеки и технологии.

Тут, кстати, ЯП тоже мог бы предоставить какой-то простой синтаксис. Например возможность прикастовать dynamic к статическому типу, что вставит автоматом код конвертации, компилятору-то это раз плюнуть. Хотя это можно и библиотекой через reflection сделать, так что не критично (если reflection есть, конечно).

Исправление vbr, :

Варианты? Вот, хочется впендюрить в строгий статический язык джейсонину из интернета, в которой в принципе может быть что угодно. Это логически самопротиворечивая задача, тут красивого решения не предвидится.

Решение простое и в C# он сделано с помощью dynamic. Парсим JSON в map/array и даём возможность обращаться к нему, как будто это объект с полями.

dynamic user = httpGet(url).json()
return (String) user.name

А вот если в коде уже хочется полновесный объект типа User, тогда да, какой-то маппинг надо делать. Но в общем-то и в динамических языках просто пулять внутрь какой-то непроверенный распарсенный JSON тоже не стоит, там есть свои библиотеки и технологии, например zod для TypeScript.

Тут, кстати, ЯП тоже мог бы предоставить какой-то простой синтаксис. Например возможность прикастовать dynamic к статическому типу, что вставит автоматом код конвертации, компилятору-то это раз плюнуть. Хотя это можно и библиотекой через reflection сделать, так что не критично (если reflection есть, конечно).

Исходная версия vbr, :

Варианты? Вот, хочется впендюрить в строгий статический язык джейсонину из интернета, в которой в принципе может быть что угодно. Это логически самопротиворечивая задача, тут красивого решения не предвидится.

Решение простое и в C# он сделано с помощью dynamic. Парсим JSON в map/array и даём возможность обращаться к нему, как будто это объект с полями.

dynamic user = httpGet(url).json()
return user.name

А вот если в коде уже хочется полновесный объект типа User, тогда да, какой-то маппинг надо делать. Но в общем-то и в динамических языках просто пулять внутрь какой-то непроверенный распарсенный JSON тоже не стоит, там есть свои библиотеки и технологии, например zod для TypeScript.

Тут, кстати, ЯП тоже мог бы предоставить какой-то простой синтаксис. Например возможность прикастовать dynamic к статическому типу, что вставит автоматом код конвертации, компилятору-то это раз плюнуть. Хотя это можно и библиотекой через reflection сделать, так что не критично (если reflection есть, конечно).