Кто работает или работал с
Сразу скажу, что пишу я для новичков, для меня json (и xml) был трудностью, о которой мало где писали. Сейчас в Delphi есть официальная поддержка формата JSON и это очень удобная хрень я вам скажу.
Объяснять как работает парсер
JSON и класс Delphi
Встроенный парсер JSON позволяет работать с классом как с JSON объектом напрямую. Не понятно? И правильно. Сейчас покажу.
Возьмём вот такой класс погоды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | TWeatherData = class private FHumidity: Extended ; FPressure: Extended ; FTemp: Extended ; FTemp_max: Extended ; FTemp_min: Extended ; public property humidity: Extended read FHumidity write FHumidity; property pressure: Extended read FPressure write FPressure; property temp: Extended read FTemp write FTemp; property temp_max: Extended read FTemp_max write FTemp_max; property temp_min: Extended read FTemp_min write FTemp_min; function ToJsonString: string ; class function FromJsonString(AJsonString: string ): TWeatherData; end ; |
Позже, я вам объясню, почему так не аккуратно он описан. Но сейчас главное заметить два метода ToJsonString и FromJsonString.
Эти методы, как уже видно из их названия, позволяют преобразовать данные класса в Json-формат и обратно. Как? – По строчке на каждый метод не зависимо от класса.
1 2 3 4 5 6 7 8 9 | function TWeatherData . ToJsonString: string ; begin result := TJson . ObjectToJsonString(self); end ; class function TWeatherData . FromJsonString(AJsonString: string ): TWeatherData; begin result := TJson . JsonToObject<TWeatherData>(AJsonString) end ; |
Вот собственно и всё. Парсер Json сам используя RTTI всё сделает. На этом собственно и всё.
JsonToDelphiClass
Существует инструмент, позволяющий сгенерировать json-совместимый класс из любого json (не специальная структура, а данные). Например, у нас есть ответ от сайта в формате json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | { "coord": { "lon": -0.13, "lat": 51.51 }, "weather": [ { "id": 300, "main": "Drizzle", "description": "light intensity drizzle", "icon": "09d" } ], "base": "stations", "main": { "temp": 280.32, "pressure": 1012, "humidity": 81, "temp_min": 279.15, "temp_max": 281.15 }, "visibility": 10000, "wind": { "speed": 4.1, "deg": 80 }, "clouds": { "all": 90 }, "dt": 1485789600, "sys": { "type": 1, "id": 5091, "message": 0.0103, "country": "GB", "sunrise": 1485762037, "sunset": 1485794875 }, "id": 2643743, "name": "London", "cod": 200 } |
Мы открываем https://jsontodelphi.com и в главное поле вставляем скопированный ответ от сервера. Нажимаем “Generate”.

И получаем:

И получаем, полностью сформированную структуру данных указанного вами json-файла в лице Delphi класса (классов).
В дополнение
Метод FromJsonString является классовым и создаёт новый объект как конструктор. Для обновления уже созданного класса можно добавить и использовать метод:
1 2 3 4 | procedure TWeather . ParseFromJson(AJsonObject: TJsonObject); begin TJson . JsonToObject(Self, AJsonObject); end ; |
Примером работы с json я прикреплю небольшую программку, которая показывает погоду выбранного вам города.