35 lines
		
	
	
		
			670 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			670 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "vendor/okjson"
 | |
| 
 | |
| module Utils
 | |
|   module JSON
 | |
|     extend self
 | |
| 
 | |
|     Error = Class.new(StandardError)
 | |
| 
 | |
|     def load(str)
 | |
|       Vendor::OkJson.decode(str)
 | |
|     rescue Vendor::OkJson::Error => e
 | |
|       raise Error, e.message
 | |
|     end
 | |
| 
 | |
|     def dump(obj)
 | |
|       Vendor::OkJson.encode(stringify_keys(obj))
 | |
|     end
 | |
| 
 | |
|     def stringify_keys(obj)
 | |
|       case obj
 | |
|       when Array
 | |
|         obj.map { |val| stringify_keys(val) }
 | |
|       when Hash
 | |
|         obj.inject({}) do |result, (key, val)|
 | |
|           key = key.respond_to?(:to_s) ? key.to_s : key
 | |
|           val = stringify_keys(val)
 | |
|           result.merge!(key => val)
 | |
|         end
 | |
|       else
 | |
|         obj
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | 
