Important
This library is no longer supported or updated by the Crystal Team, therefore we have archived the repository.
The contents are still available readonly and continue to work as a shards dependency.
If you wish to continue development yourself, we recommend you fork it. We can also arrange to transfer ownership.
If you have further questions, please reach out on on https://forum.crystal-lang.org or [email protected]
Provides the legacy JSON.mapping
macro method.
This shard is provided as-is and considered deprecated. It won't receive feature enhancements.
Please consider using JSON::Serializable
instead, the successor included in Crystal's standard library.
- Add the dependency to your
shard.yml
:
dependencies:
json_mapping:
github: crystal-lang/json_mapping.cr
- Run
shards install
require "json_mapping"
class Location
JSON.mapping(
lat: Float64,
lng: Float64,
)
end
class House
JSON.mapping(
address: String,
location: {type: Location, nilable: true},
)
end
house = House.from_json(%({"address": "Crystal Road 1234", "location": {"lat": 12.3, "lng": 34.5}}))
house.address # => "Crystal Road 1234"
house.location # => #<Location:0x10cd93d80 @lat=12.3, @lng=34.5>
house.to_json # => %({"address":"Crystal Road 1234","location":{"lat":12.3,"lng":34.5}})
houses = Array(House).from_json(%([{"address": "Crystal Road 1234", "location": {"lat": 12.3, "lng": 34.5}}]))
houses.size # => 1
houses.to_json # => %([{"address":"Crystal Road 1234","location":{"lat":12.3,"lng":34.5}}])