[前][次][番号順一覧][スレッド一覧]

ruby-changes:62090

From: BurdetteLamar <ko1@a...>
Date: Wed, 1 Jul 2020 18:51:19 +0900 (JST)
Subject: [ruby-changes:62090] 4689fd5f99 (master): [flori/json] Rdoc enhancements

https://git.ruby-lang.org/ruby.git/commit/?id=4689fd5f99

From 4689fd5f9982a148052d76e8e1a7bd85256baec6 Mon Sep 17 00:00:00 2001
From: BurdetteLamar <burdettelamar@y...>
Date: Wed, 6 May 2020 07:59:54 -0500
Subject: [flori/json] Rdoc enhancements

https://github.com/flori/json/commit/e7e3732130

diff --git a/ext/json/lib/json.rb b/ext/json/lib/json.rb
index 151d9c2..a96f4bc 100644
--- a/ext/json/lib/json.rb
+++ b/ext/json/lib/json.rb
@@ -2,88 +2,405 @@ https://github.com/ruby/ruby/blob/trunk/ext/json/lib/json.rb#L2
 require 'json/common'
 
 ##
-# = JavaScript Object Notation (JSON)
+# = JavaScript \Object Notation (\JSON)
 #
-# JSON is a lightweight data-interchange format. It is easy for us
-# humans to read and write. Plus, equally simple for machines to generate or parse.
-# JSON is completely language agnostic, making it the ideal interchange format.
+# \JSON is a lightweight data-interchange format.
 #
-# Built on two universally available structures:
+# A \JSON value is one of the following:
+# - Double-quoted text:  <tt>"foo"</tt>.
+# - Number:  +1+, +1.0+, +2.0e2+.
+# - Boolean:  +true+, +false+.
+# - Null: +null+.
+# - \Array: an ordered list of values, enclosed by square brackets:
+#     ["foo", 1, 1.0, 2.0e2, true, false, null]
 #
-# 1. A collection of name/value pairs. Often referred to as an _object_, hash table,
-#    record, struct, keyed list, or associative array.
-# 2. An ordered list of values. More commonly called an _array_, vector, sequence or
-#    list.
+# - \Object: a collection of name/value pairs, enclosed by curly braces;
+#   each name is double-quoted text;
+#   the values may be any \JSON values:
+#     {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}
 #
-# To read more about JSON visit: http://json.org
+# A \JSON array or object may contain nested arrays, objects, and scalars
+# to any depth:
+#   {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}
+#   [{"foo": 0, "bar": 1}, ["baz", 2]]
 #
-# == Parsing JSON
-#
-# To parse a JSON string received by another application or generated within
-# your existing application:
+# == Using \Module \JSON
 #
+# To make module \JSON available in your code, begin with:
 #   require 'json'
 #
-#   my_hash = JSON.parse('{"hello": "goodbye"}')
-#   puts my_hash["hello"] # => "goodbye"
+# All examples here assume that this has been done.
 #
-# Notice the extra quotes <tt>''</tt> around the hash notation. Ruby expects
-# the argument to be a string and can't convert objects like a hash or array.
+# === Parsing \JSON
 #
-# Ruby converts your string into a hash
+# You can parse a \String containing \JSON data using
+# either of two methods:
+# - <tt>JSON.parse(source, opts)</tt>
+# - <tt>JSON.parse!(source, opts)</tt>
 #
-# == Generating JSON
+# where
+# - +source+ is a Ruby object.
+# - +opts+ is a \Hash object containing options
+#   that control both input allowed and output formatting.
 #
-# Creating a JSON string for communication or serialization is
-# just as simple.
+# The difference between the two methods
+# is that JSON.parse! omits some checks
+# and may not be safe for some +source+ data;
+# use it only for data from trusted sources.
+# Use the safer method JSON.parse for less trusted sources.
 #
-#   require 'json'
+# ==== Parsing \JSON Arrays
 #
-#   my_hash = {:hello => "goodbye"}
-#   puts JSON.generate(my_hash) # => "{\"hello\":\"goodbye\"}"
+# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array:
+#   json = '["foo", 1, 1.0, 2.0e2, true, false, null]'
+#   ruby = JSON.parse(json)
+#   ruby # => ["foo", 1, 1.0, 200.0, true, false, nil]
+#   ruby.class # => Array
 #
-# Or an alternative way:
+# The \JSON array may contain nested arrays, objects, and scalars
+# to any depth:
+#   json = '[{"foo": 0, "bar": 1}, ["baz", 2]]'
+#   JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]]
 #
-#   require 'json'
-#   puts({:hello => "goodbye"}.to_json) # => "{\"hello\":\"goodbye\"}"
+# ==== Parsing \JSON \Objects
+#
+# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash:
+#   json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}'
+#   ruby = JSON.parse(json)
+#   ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil}
+#   ruby.class # => Hash
+#
+# The \JSON object may contain nested arrays, objects, and scalars
+# to any depth:
+#   json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}'
+#   JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]}
+#
+# ==== Parsing \JSON Scalars
+#
+# When the source is a \JSON scalar (not an array or object),
+# JSON.parse returns a Ruby scalar.
+#
+# \String:
+#   ruby = JSON.parse('"foo"')
+#   ruby # => "foo"
+#   ruby.class # => String
+# \Integer:
+#   ruby = JSON.parse('1')
+#   ruby # => 1
+#   ruby.class # => Integer
+# \Float:
+#   ruby = JSON.parse('1.0')
+#   ruby # => 1.0
+#   ruby.class # => Float
+#   ruby = JSON.parse('2.0e2')
+#   ruby # => 200
+#   ruby.class # => Float
+# Boolean:
+#   ruby = JSON.parse('true')
+#   ruby # => true
+#   ruby.class # => TrueClass
+#   ruby = JSON.parse('false')
+#   ruby # => false
+#   ruby.class # => FalseClass
+# Null:
+#   ruby = JSON.parse('null')
+#   ruby # => nil
+#   ruby.class # => NilClass
+#
+# === Generating \JSON
+#
+# To generate a Ruby \String containing \JSON data,
+# use method <tt>JSON.generate(source, opts)</tt>, where
+# - +source+ is a Ruby object.
+# - +opts+ is a \Hash object containing options
+#   that control both input allowed and output formatting.
+#
+# ==== Generating \JSON from Arrays
+#
+# When the source is a Ruby \Array, JSON.generate returns
+# a \String containing a \JSON array:
+#   ruby = [0, 's', :foo]
+#   json = JSON.generate(ruby)
+#   json # => "[0,\"s\",\"foo\"]"
+#
+# The Ruby \Array array may contain nested arrays, hashes, and scalars
+# to any depth:
+#   ruby = [0, [1, 2], {foo: 3, bar: 4}]
+#   json = JSON.generate(ruby)
+#   json # => "[0,[1,2],{\"foo\":3,\"bar\":4}]"
+#
+# ==== Generating \JSON from Hashes
+#
+# When the source is a Ruby \Hash, JSON.generate returns
+# a \String containing a \JSON object:
+#   ruby = {foo: 0, bar: 's', baz: :bat}
+#   json = JSON.generate(ruby)
+#   json # => "{\"foo\":0,\"bar\":\"s\",\"baz\":\"bat\"}"
+#
+# The Ruby \Hash array may contain nested arrays, hashes, and scalars
+# to any depth:
+#   ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
+#   json = JSON.generate(ruby)
+#   json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}"
+#
+# ==== Generating \JSON from Other Objects
+#
+# When the source is neither an \Array nor a \Hash,
+# the generated \JSON data depends on the class of the source.
+#
+# When the source is a Ruby \Integer or \Float, JSON.generate returns
+# a \String containing a \JSON number:
+#   JSON.generate(Integer(0)) # => "0""
+#   JSON.generate(Float(1.0)) # => "1.0"
+#
+# When the source is a Ruby \String, JSON.generate returns
+# a \String containing a \JSON string (with double-quotes):
+#   JSON.generate('A string') # => "\"A string\""
+#
+# When the source is +true+, +false+ or +nil+, JSON.generate returns
+# a \String containing the corresponding \JSON token:
+#   JSON.generate(true) # => "true"
+#   JSON.generate(false) # => "false"
+#   JSON.generate(nil) # => "null"
+#
+# When the source is none of the above, JSON.generate returns
+# a \String containing a \JSON string representation of the source:
+#   JSON.generate(:foo) # => "\"foo\""
+#   JSON.generate(Complex(0, 0)) # => "\"0+0i\""
+#   JSON.generate(Dir.new('.')) # => "\"#<Dir:0x0000000006bb30b8>\""
+#
+# == \JSON Additions
+#
+# When you "round trip" a non-\String object from Ruby to \JSON and back,
+# you have a new \String, instead of the object you began with:
+#   ruby0 = Range.new(0, 2)
+#   json = JSON.generate(ruby0)
+#   json # => "\"0..2\""
+#   ruby1 = JSON.parse(json)
+#   ruby1 # => "0..2"
+#   ruby1.class # => String
+#
+# You can use \JSON _additions_ to preserve the original object.
+# The addition is an extension of a ruby class, so that:
+# - \JSON.generate stores more information in the \JSON string.
+# - \JSON.parse, called with option +create_additions+,
+#   uses that information to create a proper Ruby object.
 #
-# <tt>JSON.generate</tt> only allows objects or arrays to be converted
-# to JSON syntax. <tt>to_json</tt>, however, accepts many Ruby classes
-# even though it acts only as a method for serialization:
+# This example shows a \Range being generated into \JSON
+# and parsed back into Ruby, both without and with
+# the addition for \Range:
+#   ruby = Range.new(0, 2)
+#   # This passage does not use the addition for Range.
+#   json0 = JSON.generate(ruby)
+#   ruby0 = JSON.parse(json0)
+#   # This passage uses the addition for Range.
+#   require 'json/add/range'
+#   json1 = JSON.generate(ruby)
+#   ruby1 = JSON.parse(json1, create_additions: true)
+#   # Make a nice display.
+#   display = <<EOT
+#   Generated JSON:
+#     Without addition:  #{json0} (#{json0.class})
+#     With addition:     #{json1} (#{json1.class})
+#   Parsed JSON:
+#     Without addition:  #{ruby0.inspect} (#{ruby0.class})
+#     With addition:     #{ruby1.inspect} (#{ruby1.class})
+#   EOT
+#   puts display
 #
+# This output shows the different results:
+#   Generated JSON:
+#     Without addition:  "0..2" (String)
+#     With addition:     {"json_class":"Range","a":[0,2,false]} (String)
+#   Parsed JSON:
+#     Without addition:  "0..2" (String)
+#     With addition:     0..2 (Range)
+#
+# The \JSON module includes additions for certain classes.
+# You can also craft custom additions.
+# See {Custom \JSON Additions}[#module-JSON-label-Custom+JSON+Additions].
+#
+# === Built-in Additions
+#
+# The \JSON module includes additions for certain classes.
+# To use an addition, +require+ its source:
+# - BigDecimal: <tt>require 'json/add/bigdecimal'</tt>
+# - Complex: <tt>require 'json/add/complex'</tt>
+# - Date: <tt>require 'json/add/date'</tt>
+# - DateTime:  (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]