json2ruby
A ruby rool for generating POROs from JSON data. It is intended to generate ruby model classes/modules from existing JSON data, e.g. responses from an API.
The tool will 'fold down' objects with identical fields - i.e. if an object has exactly the same field names and types as another, it will assume they are the same type.
'Root' entities are named after the files that they are parsed from. Entities with no obvious name (items in an array, for instance) are named Unknown<x>
where x
increments from 1.
Installation
gem install json2ruby
Usage
json2ruby.rb [options] <file.json> [<file.json>....]
Option Flags | Default | Description |
---|---|---|
-o, --outputdir |
./classes |
The output directory for Ruby files |
-m, --modulename |
The Ruby module for files | |
-s, --superclass |
The superclass for classes | |
-r, --require |
Add ruby require to files |
|
-i, --include |
Add ruby include to files |
|
-e, --extend |
Add ruby extend to files |
|
-M, --modules |
Generate Ruby modules, not classes | |
-a, --attributemethod |
attr_accessor |
Use a custom attribute definition method |
-c, --collectionmethod |
attr_accessor |
Use a custom collection definition method |
-t, --types |
Include type name in attribute definition call | |
-b, --baseless |
Don't generate for the root object in each file | |
-f, --forceoverwrite |
Overwrite Existing files | |
-N, --forcenumeric |
Use Numeric instead of Integer/Float | |
-v, --verbose |
Be verbose, List every operation/file |
Example
Generate a simple set of POROs from an API response JSON file, be verbose:
./json2ruby.rb -v data.json
Generate a (very) basic set of apotonick/representable compatible representer modules:
./json2ruby.rb -r representable/json-i Representable::JSON -M -a property -c collection data.json
Notes
The option -m, --modulename
can take path module names in FirstModule::Submodule::SubSubModule
format, which will produce classes like so:
module FirstModule
module Submodule
module SubSubModule
class JSONObject
...
end
end
end
end
The option -N, --forcenumeric
can be useful to fold down identical types where an attribute which is a float happens to have an integer value, to avoid generating two identical types.
Documentation
Regenerate the documentation with 'rdoc':
rdoc
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request