Module JSON
In: lib/json.rb
lib/json/editor.rb
StringScanner Parser JSONTreeView MainWindow Gtk::TreeView OptionsMenu EditMenu PopUpMenu FileMenu Gtk::Window Enumerable TreeIter Gtk State lib/json.rb lib/json/editor.rb MenuExtension lib/json/editor.rb Gtk Editor JSON Module: JSON

This module is the namespace for all the JSON related classes. It also defines some module functions to expose a nicer API to users, instead of using the parser and other classes directly.

Methods

Classes and Modules

Module JSON::Editor
Class JSON::Parser
Class JSON::State

Constants

JSONError = Class.new StandardError   The base exception for JSON errors.
ParserError = Class.new JSONError   This exception is raise, if a parser error occurs.
UnparserError = Class.new JSONError   This exception is raise, if a unparser error occurs.
CircularDatastructure = Class.new UnparserError   If a circular data structure is encountered while unparsing this exception is raised.
UTF16toUTF8 = Iconv.new('utf-8', 'utf-16be')   An iconv instance to convert from UTF8 to UTF16 Big Endian.
UTF8toUTF16 = Iconv.new('utf-16be', 'utf-8');   An iconv instance to convert from UTF16 Big Endian to UTF8.

Public Class methods

Switches on Unicode support, if enable is true. Otherwise switches Unicode support off.

[Source]

     # File lib/json.rb, line 138
138:     def support_unicode=(enable)
139:       @support_unicode = enable
140:     end

Returns true if JSON supports unicode, otherwise false is returned.

[Source]

     # File lib/json.rb, line 143
143:     def support_unicode?
144:       !!@support_unicode
145:     end

Public Instance methods

Parse the JSON string source into a Ruby data structure and return it.

[Source]

     # File lib/json.rb, line 441
441:   def parse(source)
442:     Parser.new(source).parse
443:   end

Unparse the Ruby data structure obj into a JSON string and return it. The returned string is a prettier form of the string returned by unparse.

[Source]

     # File lib/json.rb, line 454
454:   def pretty_unparse(obj)
455:     state = JSON::State.new(
456:       :indent     => '  ',
457:       :space      => ' ',
458:       :object_nl  => "\n",
459:       :array_nl   => "\n"
460:     )
461:     obj.to_json(state)
462:   end

Unparse the Ruby data structure obj into a single line JSON string and return it. state is a JSON::State object, that can be used to configure the output further.

[Source]

     # File lib/json.rb, line 448
448:   def unparse(obj, state = nil)
449:     obj.to_json(JSON::State.from_state(state))
450:   end

Convert string from UTF16 (big endian) encoding to UTF8 encoding and return it.

[Source]

     # File lib/json.rb, line 392
392:   def utf16_to_utf8(string)
393:     bytes = '' << string[0, 2].to_i(16) << string[2, 2].to_i(16)
394:     JSON::UTF16toUTF8.iconv(bytes)
395:   end

Convert a UTF8 encoded Ruby string string to a JSON string, encoded with UTF16 big endian characters as \u????, and return it.

[Source]

     # File lib/json.rb, line 399
399:   def utf8_to_json(string)
400:     i, n, result = 0, string.size, ''
401:     while i < n
402:       char = string[i]
403:       case
404:       when char == ?\b then result << '\b'
405:       when char == ?\t then result << '\t'
406:       when char == ?\n then result << '\n'
407:       when char == ?\f then result << '\f'
408:       when char == ?\r then result << '\r'
409:       when char == ?"  then result << '\"'
410:       when char == ?\\ then result << '\\\\'
411:       when char.between?(0x0, 0x1f) then result << "\\u%04x" % char
412:       when char.between?(0x20, 0x7f) then result << char
413:       when !(JSON.support_unicode? && $KCODE == 'UTF8')
414:         # if utf8 mode is switched off or unicode not supported, just pass
415:         # bytes through:
416:         result << char
417:       when char & 0xe0 == 0xc0
418:         result << '\u' << utf8_to_utf16(string[i, 2])
419:         i += 1
420:       when char & 0xf0 == 0xe0
421:         result << '\u' << utf8_to_utf16(string[i, 3])
422:         i += 2
423:       when char & 0xf8 == 0xf0
424:         result << '\u' << utf8_to_utf16(string[i, 4])
425:         i += 3
426:       when char & 0xfc == 0xf8
427:         result << '\u' << utf8_to_utf16(string[i, 5])
428:         i += 4
429:       when char & 0xfe == 0xfc
430:         result << '\u' << utf8_to_utf16(string[i, 6])
431:         i += 5
432:       else
433:         raise JSON::UnparserError, "Encountered unknown UTF-8 byte: %x!" % char
434:       end
435:       i += 1
436:     end
437:     result
438:   end

Convert string from UTF8 encoding to UTF16 (big endian) encoding and return it.

[Source]

     # File lib/json.rb, line 386
386:   def utf8_to_utf16(string)
387:     JSON::UTF8toUTF16.iconv(string).unpack('H*')[0]
388:   end

[Validate]