summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2009-11-25 02:19:07 +0100
committerFlorian Frank <flori@ping.de>2009-11-25 02:19:07 +0100
commit5f420debe6291197e97965b859c4a51f587c0144 (patch)
tree75249c550346bd071ff10a6aa27d7b3b2f965e91 /lib
parent31132c364e92eb887f7d1c4178f71930a8e35c5d (diff)
downloadjson-5f420debe6291197e97965b859c4a51f587c0144.tar.gz
implemented symbolize_names feature, #8
Diffstat (limited to 'lib')
-rw-r--r--lib/json/common.rb5
-rw-r--r--lib/json/pure/parser.rb6
-rw-r--r--lib/json/version.rb2
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/json/common.rb b/lib/json/common.rb
index 39f6336..2f1584e 100644
--- a/lib/json/common.rb
+++ b/lib/json/common.rb
@@ -116,9 +116,14 @@ module JSON
# * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
# defiance of RFC 4627 to be parsed by the Parser. This option defaults
# to false.
+ # * *symbolize_names*: If set to true, returns symbols for the names
+ # (keys) in a JSON object. Otherwise strings are returned, which is also
+ # the default.
# * *create_additions*: If set to false, the Parser doesn't create
# additions even if a matchin class and create_id was found. This option
# defaults to true.
+ # * *object_class*: Defaults to Hash
+ # * *array_class*: Defaults to Array
def parse(source, opts = {})
JSON.parser.new(source, opts).parse
end
diff --git a/lib/json/pure/parser.rb b/lib/json/pure/parser.rb
index 7a09f2f..f6de8d1 100644
--- a/lib/json/pure/parser.rb
+++ b/lib/json/pure/parser.rb
@@ -60,6 +60,9 @@ module JSON
# * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
# defiance of RFC 4627 to be parsed by the Parser. This option defaults
# to false.
+ # * *symbolize_names*: If set to true, returns symbols for the names
+ # (keys) in a JSON object. Otherwise strings are returned, which is also
+ # the default.
# * *create_additions*: If set to false, the Parser doesn't create
# additions even if a matchin class and create_id was found. This option
# defaults to true.
@@ -109,6 +112,7 @@ module JSON
@max_nesting = 0
end
@allow_nan = !!opts[:allow_nan]
+ @symbolize_names = !!opts[:symbolize_names]
ca = true
ca = opts[:create_additions] if opts.key?(:create_additions)
@create_id = ca ? JSON.create_id : nil
@@ -267,7 +271,7 @@ module JSON
end
skip(IGNORE)
unless (value = parse_value).equal? UNPARSED
- result[string] = value
+ result[@symbolize_names ? string.to_sym : string] = value
delim = false
skip(IGNORE)
if scan(COLLECTION_DELIMITER)
diff --git a/lib/json/version.rb b/lib/json/version.rb
index ff48b9b..c0fd7e0 100644
--- a/lib/json/version.rb
+++ b/lib/json/version.rb
@@ -1,6 +1,6 @@
module JSON
# JSON version
- VERSION = '1.2.0'
+ VERSION = '1.2.1'
VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: