Sha256: 927b464ea9f455f90b711e62d0b20c8f53bd191fa1c758c83c50939eff08dddd

Contents?: true

Size: 957 Bytes

Versions: 3

Compression:

Stored size: 957 Bytes

Contents

`var json_parse = JSON.parse;`

module JSON
  def self.parse(source)
    `return to_opal(json_parse(source));`
  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;

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

          return hash;
      }
    };
  }
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
opal-0.3.22 core/json.rb
opal-0.3.21 core/json.rb
opal-0.3.20 core/json.rb