Module | JSON |
In: |
lib/json/editor.rb
lib/json.rb |
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.
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. | |
UTF16toUTF8 | = | Iconv.new('utf-8', 'utf-16') | An iconv instance to convert from UTF8 to UTF16 Big Endian. | |
UTF8toUTF16 | = | Iconv.new('utf-16', 'utf-8'); | An iconv instance to convert from UTF16 Big Endian to UTF8. | |
UTF8toUTF16 | = | swapper.new(UTF8toUTF16) | ||
UTF16toUTF8 | = | swapper.new(UTF16toUTF8) |
Switches on Unicode support, if enable is true. Otherwise switches Unicode support off.
# File lib/json.rb, line 138 138: def support_unicode=(enable) 139: @support_unicode = enable 140: end
Swap consecutive bytes in string in place.
# File lib/json.rb, line 207 207: def self.swap!(string) 208: 0.upto(string.size / 2) do |i| 209: break unless string[2 * i + 1] 210: string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i] 211: end 212: string 213: end
# File lib/json.rb, line 187 187: def iconv(string) 188: string = JSON.swap!(string.dup) 189: @iconv.iconv(string) 190: end
# File lib/json.rb, line 174 174: def iconv(string) 175: result = @iconv.iconv(string) 176: JSON.swap!(result) 177: 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.
# File lib/json.rb, line 510 510: def pretty_unparse(obj) 511: state = JSON::State.new( 512: :indent => ' ', 513: :space => ' ', 514: :object_nl => "\n", 515: :array_nl => "\n" 516: ) 517: obj.to_json(state) 518: 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.
# File lib/json.rb, line 504 504: def unparse(obj, state = nil) 505: obj.to_json(JSON::State.from_state(state)) 506: end
Convert string from UTF16 (big endian) encoding to UTF8 encoding and return it.
# File lib/json.rb, line 447 447: def utf16_to_utf8(string) 448: bytes = '' << string[0, 2].to_i(16) << string[2, 2].to_i(16) 449: JSON::UTF16toUTF8.iconv(bytes) 450: end
Convert a UTF8 encoded Ruby string string to a JSON string, encoded with UTF16 big endian characters as \u????, and return it.
# File lib/json.rb, line 454 454: def utf8_to_json(string) 455: i, n, result = 0, string.size, '' 456: while i < n 457: char = string[i] 458: case 459: when char == ?\b then result << '\b' 460: when char == ?\t then result << '\t' 461: when char == ?\n then result << '\n' 462: when char == ?\f then result << '\f' 463: when char == ?\r then result << '\r' 464: when char == ?" then result << '\"' 465: when char == ?\\ then result << '\\\\' 466: when char == ?/ then result << '\/' 467: when char.between?(0x0, 0x1f) then result << "\\u%04x" % char 468: when char.between?(0x20, 0x7f) then result << char 469: when !(JSON.support_unicode? && $KCODE == 'UTF8') 470: # if utf8 mode is switched off or unicode not supported, just pass 471: # bytes through: 472: result << char 473: when char & 0xe0 == 0xc0 474: result << '\u' << utf8_to_utf16(string[i, 2]) 475: i += 1 476: when char & 0xf0 == 0xe0 477: result << '\u' << utf8_to_utf16(string[i, 3]) 478: i += 2 479: when char & 0xf8 == 0xf0 480: result << '\u' << utf8_to_utf16(string[i, 4]) 481: i += 3 482: when char & 0xfc == 0xf8 483: result << '\u' << utf8_to_utf16(string[i, 5]) 484: i += 4 485: when char & 0xfe == 0xfc 486: result << '\u' << utf8_to_utf16(string[i, 6]) 487: i += 5 488: else 489: raise JSON::UnparserError, "Encountered unknown UTF-8 byte: %x!" % char 490: end 491: i += 1 492: end 493: result 494: end