class JSON

NOTE: Copied from github.com/HipByte/Flow/blob/master/flow/json/android/json.rb

Copied from github.com/HipByte/Flow/blob/44283b31a63bc826d2c068557b6357dc1195680b/flow/json/cocoa/json.rb

Public Class Methods

convert_java(obj) click to toggle source
# File lib/android/json.rb, line 37
def self.convert_java(obj)
  case obj
    when Org::JSON::JSONArray
      obj.length.times.map { |i| convert_java(obj.get(i)) }
    when Org::JSON::JSONObject
      iter = obj.keys
      hash = Hash.new
      loop do
        break unless iter.hasNext
        key = iter.next
        value = obj.get(key)
        hash[convert_java(key)] = convert_java(value)
      end
      hash
    when Java::Lang::String
      obj.to_s
    when Org::JSON::JSONObject::NULL
      nil
    else
      obj
  end
end
generate(object) click to toggle source
# File lib/cocoa/json.rb, line 35
def self.generate(object)
  raise "Invalid JSON object" unless NSJSONSerialization.isValidJSONObject(object)
  error_ptr = Pointer.new(:id)
  data = NSJSONSerialization.dataWithJSONObject(object, options: 0, error: error_ptr)
  unless data
    raise error_ptr[0].description
  end
  data.to_s
end
parse(str) click to toggle source
# File lib/android/json.rb, line 26
def self.parse(str)
  tok = Org::JSON::JSONTokener.new(str)
  obj = tok.nextValue
  if obj == nil
    raise "Can't deserialize object from JSON"
  end

  # Transform pure-Java JSON objects to Ruby types.
  convert_java(obj)
end