oj_windows provides seamless integration with Rails and ActiveSupport on Windows MSVC Ruby.
Add this to a Rails initializer to replace Rails' JSON handling with oj_windows:
require 'oj_windows'
Oj.optimize_rails()This single call:
- Sets
oj_windowsas the JSON encoder - Sets
oj_windowsas the JSON decoder - Optimizes common Rails types
- Mimics the JSON gem interface
For more control, configure each component separately:
require 'oj_windows'
Oj::Rails.set_encoder() # Use Oj for encoding
Oj::Rails.set_decoder() # Use Oj for decoding
Oj::Rails.optimize() # Optimize common types
Oj::Rails.mimic_JSON() # Mimic JSON gem interfaceWhen Oj::Rails.optimize() is called, these types use fast native encoding:
| Type | Description |
|---|---|
| Array | Ruby arrays |
| BigDecimal | Arbitrary precision decimals |
| Float | Floating point numbers |
| Hash | Ruby hashes |
| Range | Range objects |
| Regexp | Regular expressions |
| Time | Time objects |
| ActiveSupport::TimeWithZone | Rails time zones |
| ActionController::Parameters | Controller params |
| ActiveRecord::Base subclasses | Model instances |
oj_windows honors these ActiveSupport encoding globals:
ActiveSupport::JSON::Encoding.use_standard_json_time_format
ActiveSupport::JSON::Encoding.escape_html_entities_in_json
ActiveSupport::JSON::Encoding.time_precision
ActiveSupport::JSON::Encoding.json_encoderTo confirm oj_windows is handling JSON encoding, enable tracing:
require 'oj_windows'
Oj.default_options = { trace: true }
Oj.optimize_rails()
Time.now.to_json # Will output trace information-
Float Precision: Optimized floats use 16 significant digits (Ruby's json gem may use 16 or 17 depending on value)
-
Hash Key Collisions: Optimized hashes don't check for duplicate keys after
to_s()conversion -
Rails Mode: Calling
Oj.optimize_rails()doesn't change the default Oj mode. To also use Rails mode for direct Oj calls:
Oj.default_options = { mode: :rails }