json_pure 1.4.6 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/BSDL +22 -0
  3. data/CHANGES.md +544 -0
  4. data/COPYING +14 -16
  5. data/LEGAL +60 -0
  6. data/README.md +219 -0
  7. data/json_pure.gemspec +39 -0
  8. data/lib/json/pure.rb +3 -76
  9. metadata +45 -165
  10. data/CHANGES +0 -179
  11. data/GPL +0 -340
  12. data/README +0 -356
  13. data/Rakefile +0 -292
  14. data/TODO +0 -1
  15. data/VERSION +0 -1
  16. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +0 -52
  17. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +0 -1000
  18. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +0 -1001
  19. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +0 -900
  20. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +0 -901
  21. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +0 -1000
  22. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +0 -1001
  23. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +0 -261
  24. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +0 -1000
  25. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +0 -1001
  26. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +0 -1000
  27. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +0 -1001
  28. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +0 -1000
  29. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +0 -1001
  30. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +0 -262
  31. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +0 -1000
  32. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +0 -1001
  33. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +0 -82
  34. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +0 -34
  35. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +0 -900
  36. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +0 -901
  37. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +0 -81
  38. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +0 -1000
  39. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +0 -1001
  40. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +0 -82
  41. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +0 -1000
  42. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +0 -1001
  43. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +0 -82
  44. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +0 -1000
  45. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +0 -1001
  46. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +0 -82
  47. data/benchmarks/generator2_benchmark.rb +0 -222
  48. data/benchmarks/generator_benchmark.rb +0 -224
  49. data/benchmarks/ohai.json +0 -1216
  50. data/benchmarks/ohai.ruby +0 -1
  51. data/benchmarks/parser2_benchmark.rb +0 -251
  52. data/benchmarks/parser_benchmark.rb +0 -259
  53. data/bin/edit_json.rb +0 -9
  54. data/bin/prettify_json.rb +0 -75
  55. data/data/example.json +0 -1
  56. data/data/index.html +0 -38
  57. data/data/prototype.js +0 -4184
  58. data/ext/json/ext/generator/extconf.rb +0 -20
  59. data/ext/json/ext/generator/generator.c +0 -1417
  60. data/ext/json/ext/generator/generator.h +0 -197
  61. data/ext/json/ext/parser/extconf.rb +0 -15
  62. data/ext/json/ext/parser/parser.c +0 -1935
  63. data/ext/json/ext/parser/parser.h +0 -71
  64. data/ext/json/ext/parser/parser.rl +0 -792
  65. data/install.rb +0 -26
  66. data/lib/json/Array.xpm +0 -21
  67. data/lib/json/FalseClass.xpm +0 -21
  68. data/lib/json/Hash.xpm +0 -21
  69. data/lib/json/Key.xpm +0 -73
  70. data/lib/json/NilClass.xpm +0 -21
  71. data/lib/json/Numeric.xpm +0 -28
  72. data/lib/json/String.xpm +0 -96
  73. data/lib/json/TrueClass.xpm +0 -21
  74. data/lib/json/add/core.rb +0 -148
  75. data/lib/json/add/rails.rb +0 -58
  76. data/lib/json/common.rb +0 -391
  77. data/lib/json/editor.rb +0 -1371
  78. data/lib/json/ext.rb +0 -15
  79. data/lib/json/json.xpm +0 -1499
  80. data/lib/json/pure/generator.rb +0 -439
  81. data/lib/json/pure/parser.rb +0 -309
  82. data/lib/json/version.rb +0 -8
  83. data/lib/json.rb +0 -10
  84. data/tests/fixtures/fail1.json +0 -1
  85. data/tests/fixtures/fail10.json +0 -1
  86. data/tests/fixtures/fail11.json +0 -1
  87. data/tests/fixtures/fail12.json +0 -1
  88. data/tests/fixtures/fail13.json +0 -1
  89. data/tests/fixtures/fail14.json +0 -1
  90. data/tests/fixtures/fail18.json +0 -1
  91. data/tests/fixtures/fail19.json +0 -1
  92. data/tests/fixtures/fail2.json +0 -1
  93. data/tests/fixtures/fail20.json +0 -1
  94. data/tests/fixtures/fail21.json +0 -1
  95. data/tests/fixtures/fail22.json +0 -1
  96. data/tests/fixtures/fail23.json +0 -1
  97. data/tests/fixtures/fail24.json +0 -1
  98. data/tests/fixtures/fail25.json +0 -1
  99. data/tests/fixtures/fail27.json +0 -2
  100. data/tests/fixtures/fail28.json +0 -2
  101. data/tests/fixtures/fail3.json +0 -1
  102. data/tests/fixtures/fail4.json +0 -1
  103. data/tests/fixtures/fail5.json +0 -1
  104. data/tests/fixtures/fail6.json +0 -1
  105. data/tests/fixtures/fail7.json +0 -1
  106. data/tests/fixtures/fail8.json +0 -1
  107. data/tests/fixtures/fail9.json +0 -1
  108. data/tests/fixtures/pass1.json +0 -56
  109. data/tests/fixtures/pass15.json +0 -1
  110. data/tests/fixtures/pass16.json +0 -1
  111. data/tests/fixtures/pass17.json +0 -1
  112. data/tests/fixtures/pass2.json +0 -1
  113. data/tests/fixtures/pass26.json +0 -1
  114. data/tests/fixtures/pass3.json +0 -6
  115. data/tests/test_json.rb +0 -394
  116. data/tests/test_json_addition.rb +0 -162
  117. data/tests/test_json_encoding.rb +0 -68
  118. data/tests/test_json_fixtures.rb +0 -34
  119. data/tests/test_json_generate.rb +0 -181
  120. data/tests/test_json_rails.rb +0 -144
  121. data/tests/test_json_unicode.rb +0 -76
  122. data/tools/fuzz.rb +0 -139
  123. data/tools/server.rb +0 -61
@@ -1,309 +0,0 @@
1
- require 'strscan'
2
-
3
- module JSON
4
- module Pure
5
- # This class implements the JSON parser that is used to parse a JSON string
6
- # into a Ruby data structure.
7
- class Parser < StringScanner
8
- STRING = /" ((?:[^\x0-\x1f"\\] |
9
- # escaped special characters:
10
- \\["\\\/bfnrt] |
11
- \\u[0-9a-fA-F]{4} |
12
- # match all but escaped special characters:
13
- \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*)
14
- "/nx
15
- INTEGER = /(-?0|-?[1-9]\d*)/
16
- FLOAT = /(-?
17
- (?:0|[1-9]\d*)
18
- (?:
19
- \.\d+(?i:e[+-]?\d+) |
20
- \.\d+ |
21
- (?i:e[+-]?\d+)
22
- )
23
- )/x
24
- NAN = /NaN/
25
- INFINITY = /Infinity/
26
- MINUS_INFINITY = /-Infinity/
27
- OBJECT_OPEN = /\{/
28
- OBJECT_CLOSE = /\}/
29
- ARRAY_OPEN = /\[/
30
- ARRAY_CLOSE = /\]/
31
- PAIR_DELIMITER = /:/
32
- COLLECTION_DELIMITER = /,/
33
- TRUE = /true/
34
- FALSE = /false/
35
- NULL = /null/
36
- IGNORE = %r(
37
- (?:
38
- //[^\n\r]*[\n\r]| # line comments
39
- /\* # c-style comments
40
- (?:
41
- [^*/]| # normal chars
42
- /[^*]| # slashes that do not start a nested comment
43
- \*[^/]| # asterisks that do not end this comment
44
- /(?=\*/) # single slash before this comment's end
45
- )*
46
- \*/ # the End of this comment
47
- |[ \t\r\n]+ # whitespaces: space, horicontal tab, lf, cr
48
- )+
49
- )mx
50
-
51
- UNPARSED = Object.new
52
-
53
- # Creates a new JSON::Pure::Parser instance for the string _source_.
54
- #
55
- # It will be configured by the _opts_ hash. _opts_ can have the following
56
- # keys:
57
- # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
58
- # structures. Disable depth checking with :max_nesting => false|nil|0,
59
- # it defaults to 19.
60
- # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
61
- # defiance of RFC 4627 to be parsed by the Parser. This option defaults
62
- # to false.
63
- # * *symbolize_names*: If set to true, returns symbols for the names
64
- # (keys) in a JSON object. Otherwise strings are returned, which is also
65
- # the default.
66
- # * *create_additions*: If set to false, the Parser doesn't create
67
- # additions even if a matchin class and create_id was found. This option
68
- # defaults to true.
69
- # * *object_class*: Defaults to Hash
70
- # * *array_class*: Defaults to Array
71
- def initialize(source, opts = {})
72
- opts ||= {}
73
- if defined?(::Encoding)
74
- if source.encoding == ::Encoding::ASCII_8BIT
75
- b = source[0, 4].bytes.to_a
76
- source = case
77
- when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
78
- source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
79
- when b.size >= 4 && b[0] == 0 && b[2] == 0
80
- source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
81
- when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
82
- source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
83
-
84
- when b.size >= 4 && b[1] == 0 && b[3] == 0
85
- source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
86
- else
87
- source.dup
88
- end
89
- else
90
- source = source.encode(::Encoding::UTF_8)
91
- end
92
- source.force_encoding(::Encoding::ASCII_8BIT)
93
- else
94
- b = source
95
- source = case
96
- when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
97
- JSON.iconv('utf-8', 'utf-32be', b)
98
- when b.size >= 4 && b[0] == 0 && b[2] == 0
99
- JSON.iconv('utf-8', 'utf-16be', b)
100
- when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
101
- JSON.iconv('utf-8', 'utf-32le', b)
102
- when b.size >= 4 && b[1] == 0 && b[3] == 0
103
- JSON.iconv('utf-8', 'utf-16le', b)
104
- else
105
- b
106
- end
107
- end
108
- super source
109
- if !opts.key?(:max_nesting) # defaults to 19
110
- @max_nesting = 19
111
- elsif opts[:max_nesting]
112
- @max_nesting = opts[:max_nesting]
113
- else
114
- @max_nesting = 0
115
- end
116
- @allow_nan = !!opts[:allow_nan]
117
- @symbolize_names = !!opts[:symbolize_names]
118
- ca = true
119
- ca = opts[:create_additions] if opts.key?(:create_additions)
120
- @create_id = ca ? JSON.create_id : nil
121
- @object_class = opts[:object_class] || Hash
122
- @array_class = opts[:array_class] || Array
123
- end
124
-
125
- alias source string
126
-
127
- # Parses the current JSON string _source_ and returns the complete data
128
- # structure as a result.
129
- def parse
130
- reset
131
- obj = nil
132
- until eos?
133
- case
134
- when scan(OBJECT_OPEN)
135
- obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
136
- @current_nesting = 1
137
- obj = parse_object
138
- when scan(ARRAY_OPEN)
139
- obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
140
- @current_nesting = 1
141
- obj = parse_array
142
- when skip(IGNORE)
143
- ;
144
- else
145
- raise ParserError, "source '#{peek(20)}' not in JSON!"
146
- end
147
- end
148
- obj or raise ParserError, "source did not contain any JSON!"
149
- obj
150
- end
151
-
152
- private
153
-
154
- # Unescape characters in strings.
155
- UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
156
- UNESCAPE_MAP.update({
157
- ?" => '"',
158
- ?\\ => '\\',
159
- ?/ => '/',
160
- ?b => "\b",
161
- ?f => "\f",
162
- ?n => "\n",
163
- ?r => "\r",
164
- ?t => "\t",
165
- ?u => nil,
166
- })
167
-
168
- def parse_string
169
- if scan(STRING)
170
- return '' if self[1].empty?
171
- string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
172
- if u = UNESCAPE_MAP[$&[1]]
173
- u
174
- else # \uXXXX
175
- bytes = ''
176
- i = 0
177
- while c[6 * i] == ?\\ && c[6 * i + 1] == ?u
178
- bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
179
- i += 1
180
- end
181
- JSON::UTF16toUTF8.iconv(bytes)
182
- end
183
- end
184
- if string.respond_to?(:force_encoding)
185
- string.force_encoding(::Encoding::UTF_8)
186
- end
187
- string
188
- else
189
- UNPARSED
190
- end
191
- rescue Iconv::Failure => e
192
- raise GeneratorError, "Caught #{e.class}: #{e}"
193
- end
194
-
195
- def parse_value
196
- case
197
- when scan(FLOAT)
198
- Float(self[1])
199
- when scan(INTEGER)
200
- Integer(self[1])
201
- when scan(TRUE)
202
- true
203
- when scan(FALSE)
204
- false
205
- when scan(NULL)
206
- nil
207
- when (string = parse_string) != UNPARSED
208
- string
209
- when scan(ARRAY_OPEN)
210
- @current_nesting += 1
211
- ary = parse_array
212
- @current_nesting -= 1
213
- ary
214
- when scan(OBJECT_OPEN)
215
- @current_nesting += 1
216
- obj = parse_object
217
- @current_nesting -= 1
218
- obj
219
- when @allow_nan && scan(NAN)
220
- NaN
221
- when @allow_nan && scan(INFINITY)
222
- Infinity
223
- when @allow_nan && scan(MINUS_INFINITY)
224
- MinusInfinity
225
- else
226
- UNPARSED
227
- end
228
- end
229
-
230
- def parse_array
231
- raise NestingError, "nesting of #@current_nesting is too deep" if
232
- @max_nesting.nonzero? && @current_nesting > @max_nesting
233
- result = @array_class.new
234
- delim = false
235
- until eos?
236
- case
237
- when (value = parse_value) != UNPARSED
238
- delim = false
239
- result << value
240
- skip(IGNORE)
241
- if scan(COLLECTION_DELIMITER)
242
- delim = true
243
- elsif match?(ARRAY_CLOSE)
244
- ;
245
- else
246
- raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
247
- end
248
- when scan(ARRAY_CLOSE)
249
- if delim
250
- raise ParserError, "expected next element in array at '#{peek(20)}'!"
251
- end
252
- break
253
- when skip(IGNORE)
254
- ;
255
- else
256
- raise ParserError, "unexpected token in array at '#{peek(20)}'!"
257
- end
258
- end
259
- result
260
- end
261
-
262
- def parse_object
263
- raise NestingError, "nesting of #@current_nesting is too deep" if
264
- @max_nesting.nonzero? && @current_nesting > @max_nesting
265
- result = @object_class.new
266
- delim = false
267
- until eos?
268
- case
269
- when (string = parse_string) != UNPARSED
270
- skip(IGNORE)
271
- unless scan(PAIR_DELIMITER)
272
- raise ParserError, "expected ':' in object at '#{peek(20)}'!"
273
- end
274
- skip(IGNORE)
275
- unless (value = parse_value).equal? UNPARSED
276
- result[@symbolize_names ? string.to_sym : string] = value
277
- delim = false
278
- skip(IGNORE)
279
- if scan(COLLECTION_DELIMITER)
280
- delim = true
281
- elsif match?(OBJECT_CLOSE)
282
- ;
283
- else
284
- raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
285
- end
286
- else
287
- raise ParserError, "expected value in object at '#{peek(20)}'!"
288
- end
289
- when scan(OBJECT_CLOSE)
290
- if delim
291
- raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
292
- end
293
- if @create_id and klassname = result[@create_id]
294
- klass = JSON.deep_const_get klassname
295
- break unless klass and klass.json_creatable?
296
- result = klass.json_create(result)
297
- end
298
- break
299
- when skip(IGNORE)
300
- ;
301
- else
302
- raise ParserError, "unexpected token in object at '#{peek(20)}'!"
303
- end
304
- end
305
- result
306
- end
307
- end
308
- end
309
- end
data/lib/json/version.rb DELETED
@@ -1,8 +0,0 @@
1
- module JSON
2
- # JSON version
3
- VERSION = '1.4.6'
4
- VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
- VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
- VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
- VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
- end
data/lib/json.rb DELETED
@@ -1,10 +0,0 @@
1
- require 'json/common'
2
- module JSON
3
- require 'json/version'
4
-
5
- begin
6
- require 'json/ext'
7
- rescue LoadError
8
- require 'json/pure'
9
- end
10
- end
@@ -1 +0,0 @@
1
- "A JSON payload should be an object or array, not a string."
@@ -1 +0,0 @@
1
- {"Extra value after close": true} "misplaced quoted value"
@@ -1 +0,0 @@
1
- {"Illegal expression": 1 + 2}
@@ -1 +0,0 @@
1
- {"Illegal invocation": alert()}
@@ -1 +0,0 @@
1
- {"Numbers cannot have leading zeroes": 013}
@@ -1 +0,0 @@
1
- {"Numbers cannot be hex": 0x14}
@@ -1 +0,0 @@
1
- [[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
@@ -1 +0,0 @@
1
- {"Missing colon" null}
@@ -1 +0,0 @@
1
- ["Unclosed array"
@@ -1 +0,0 @@
1
- {"Double colon":: null}
@@ -1 +0,0 @@
1
- {"Comma instead of colon", null}
@@ -1 +0,0 @@
1
- ["Colon instead of comma": false]
@@ -1 +0,0 @@
1
- ["Bad value", truth]
@@ -1 +0,0 @@
1
- ['single quote']
@@ -1 +0,0 @@
1
- ["tab character in string "]
@@ -1,2 +0,0 @@
1
- ["line
2
- break"]
@@ -1,2 +0,0 @@
1
- ["line\
2
- break"]
@@ -1 +0,0 @@
1
- {unquoted_key: "keys must be quoted"}
@@ -1 +0,0 @@
1
- ["extra comma",]
@@ -1 +0,0 @@
1
- ["double extra comma",,]
@@ -1 +0,0 @@
1
- [ , "<-- missing value"]
@@ -1 +0,0 @@
1
- ["Comma after the close"],
@@ -1 +0,0 @@
1
- ["Extra close"]]
@@ -1 +0,0 @@
1
- {"Extra comma": true,}
@@ -1,56 +0,0 @@
1
- [
2
- "JSON Test Pattern pass1",
3
- {"object with 1 member":["array with 1 element"]},
4
- {},
5
- [],
6
- -42,
7
- true,
8
- false,
9
- null,
10
- {
11
- "integer": 1234567890,
12
- "real": -9876.543210,
13
- "e": 0.123456789e-12,
14
- "E": 1.234567890E+34,
15
- "": 23456789012E666,
16
- "zero": 0,
17
- "one": 1,
18
- "space": " ",
19
- "quote": "\"",
20
- "backslash": "\\",
21
- "controls": "\b\f\n\r\t",
22
- "slash": "/ & \/",
23
- "alpha": "abcdefghijklmnopqrstuvwyz",
24
- "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
25
- "digit": "0123456789",
26
- "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
27
- "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
28
- "true": true,
29
- "false": false,
30
- "null": null,
31
- "array":[ ],
32
- "object":{ },
33
- "address": "50 St. James Street",
34
- "url": "http://www.JSON.org/",
35
- "comment": "// /* <!-- --",
36
- "# -- --> */": " ",
37
- " s p a c e d " :[1,2 , 3
38
-
39
- ,
40
-
41
- 4 , 5 , 6 ,7 ],
42
- "compact": [1,2,3,4,5,6,7],
43
- "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
44
- "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
45
- "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
46
- : "A key can be any string"
47
- },
48
- 0.5 ,98.6
49
- ,
50
- 99.44
51
- ,
52
-
53
- 1066
54
-
55
-
56
- ,"rosebud"]
@@ -1 +0,0 @@
1
- ["Illegal backslash escape: \x15"]
@@ -1 +0,0 @@
1
- ["Illegal backslash escape: \'"]
@@ -1 +0,0 @@
1
- ["Illegal backslash escape: \017"]
@@ -1 +0,0 @@
1
- [[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
@@ -1 +0,0 @@
1
- ["tab\ character\ in\ string\ "]
@@ -1,6 +0,0 @@
1
- {
2
- "JSON Test Pattern pass3": {
3
- "The outermost value": "must be an object or array.",
4
- "In this test": "It is an object."
5
- }
6
- }