module Kernel def to_json(*a) to_s.to_json(*a) end end class String def to_json(*a) inspect end end class Array def to_json(*a) parts = collect { |o| o.to_json(*a) } "[#{parts.join ', '}]" end end class Hash def to_json(*a) parts = [] each { |k, v| parts << "#{k.to_json(*a)}: #{v.to_json(*a)}" } "{#{parts.join ', '}}" end end class Numeric def to_json(*a) to_s end end class TrueClass def to_json(*a) "true" end end class FalseClass def to_json(*a) "false" end end class NilClass def to_json(*a) "null" end end