История изменений
Исправление 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 есть, конечно).