Sha256: f5294bc46f6f6a77865183615bfa6e0f323c17fd73e8a2a1375466342990e0d3

Contents?: true

Size: 1.12 KB

Versions: 11

Compression:

Stored size: 1.12 KB

Contents

`var json_parse = JSON.parse, __hasOwn = Object.prototype.hasOwnProperty`

module JSON
  def self.parse(source)
    `return to_opal(json_parse(source));`
  end

  # Raw js object => opal object
  def self.from_object(js_object)
    `return to_opal(js_object)`
  end

  %x{
    function to_opal(value) {
      switch (typeof value) {
        case 'string':
          return value;

        case 'number':
          return value;

        case 'boolean':
          return !!value;

        case 'null':
          return nil;

        case 'object':
          if (!value) return nil;

          if (value._isArray) {
            var arr = [];

            for (var i = 0, ii = value.length; i < ii; i++) {
              arr.push(to_opal(value[i]));
            }

            return arr;
          }
          else {
            var hash = #{ {} }, v, map = hash.map, keys = hash.keys;

            for (var k in value) {
              if (__hasOwn.call(value, k)) {
                v = to_opal(value[k]);
                keys.push(k);
                map[k] = v;
              }
            }
          }

          return hash;
      }
    };
  }
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
opal-0.4.3 stdlib/json.rb
opal-0.4.2 opal/opal/json.rb
opal-0.4.1 opal/opal/json.rb
opal-0.4.0 opal/opal/json.rb
opal-0.3.44 opal/opal/json.rb
opal-0.3.43 opal/opal/json.rb
opal-0.3.42 opal/opal/json.rb
opal-0.3.41 opal/opal/json.rb
opal-0.3.40 lib/assets/javascripts/opal/json.rb
opal-0.3.39 lib/assets/javascripts/opal/json.rb
opal-0.3.38 lib/assets/javascripts/opal/json.rb