Skip to main content

custom_generator_state_for_json

🛠️ Extending JSON::Ext::Generator::State for Custom Serialization

For low-level control over JSON output—such as tweaking whitespace, injecting metadata, or handling circular references—subclass JSON::Ext::Generator::State. Override methods like array, hash, or generate_value to implement complex serialization logic.

require 'json'

class PrettyState < JSON::Ext::Generator::State
def initialize(options = {})
super
self.space = " " # Space after colon
self.space_before = "" # No space before colon
self.object_nl = "\n" # Newline after object
self.array_nl = "\n" # Newline after array elements
end

# Insert a custom header before root object
def generate(object)
write("/* Generated at: #{Time.now.utc} */\n")
super
end
end

data = {name: 'Alice', scores: [10, 20, 30]}
json = JSON.generate(data, state: PrettyState.new)
puts json