json 2.5.1 → 2.6.0
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.
- checksums.yaml +4 -4
- data/CHANGES.md +5 -5
- data/README.md +3 -3
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +1 -11
- data/ext/json/ext/parser/extconf.rb +1 -0
- data/ext/json/ext/parser/parser.c +2972 -1813
- data/ext/json/ext/parser/parser.h +5 -1
- data/ext/json/ext/parser/parser.rl +66 -28
- data/json.gemspec +2 -8
- data/lib/json/pure/parser.rb +1 -1
- data/lib/json/version.rb +1 -1
- data/lib/json.rb +1 -1
- metadata +6 -87
- data/Gemfile +0 -14
- data/lib/json/ext/.keep +0 -0
- data/tests/fixtures/fail10.json +0 -1
- data/tests/fixtures/fail11.json +0 -1
- data/tests/fixtures/fail12.json +0 -1
- data/tests/fixtures/fail13.json +0 -1
- data/tests/fixtures/fail14.json +0 -1
- data/tests/fixtures/fail18.json +0 -1
- data/tests/fixtures/fail19.json +0 -1
- data/tests/fixtures/fail2.json +0 -1
- data/tests/fixtures/fail20.json +0 -1
- data/tests/fixtures/fail21.json +0 -1
- data/tests/fixtures/fail22.json +0 -1
- data/tests/fixtures/fail23.json +0 -1
- data/tests/fixtures/fail24.json +0 -1
- data/tests/fixtures/fail25.json +0 -1
- data/tests/fixtures/fail27.json +0 -2
- data/tests/fixtures/fail28.json +0 -2
- data/tests/fixtures/fail29.json +0 -1
- data/tests/fixtures/fail3.json +0 -1
- data/tests/fixtures/fail30.json +0 -1
- data/tests/fixtures/fail31.json +0 -1
- data/tests/fixtures/fail32.json +0 -1
- data/tests/fixtures/fail4.json +0 -1
- data/tests/fixtures/fail5.json +0 -1
- data/tests/fixtures/fail6.json +0 -1
- data/tests/fixtures/fail7.json +0 -1
- data/tests/fixtures/fail8.json +0 -1
- data/tests/fixtures/fail9.json +0 -1
- data/tests/fixtures/obsolete_fail1.json +0 -1
- data/tests/fixtures/pass1.json +0 -56
- data/tests/fixtures/pass15.json +0 -1
- data/tests/fixtures/pass16.json +0 -1
- data/tests/fixtures/pass17.json +0 -1
- data/tests/fixtures/pass2.json +0 -1
- data/tests/fixtures/pass26.json +0 -1
- data/tests/fixtures/pass3.json +0 -6
- data/tests/json_addition_test.rb +0 -199
- data/tests/json_common_interface_test.rb +0 -169
- data/tests/json_encoding_test.rb +0 -107
- data/tests/json_ext_parser_test.rb +0 -15
- data/tests/json_fixtures_test.rb +0 -40
- data/tests/json_generator_test.rb +0 -399
- data/tests/json_generic_object_test.rb +0 -82
- data/tests/json_parser_test.rb +0 -497
- data/tests/json_string_matching_test.rb +0 -38
- data/tests/lib/core_assertions.rb +0 -763
- data/tests/lib/envutil.rb +0 -365
- data/tests/lib/find_executable.rb +0 -22
- data/tests/lib/helper.rb +0 -4
- data/tests/ractor_test.rb +0 -30
- data/tests/test_helper.rb +0 -17
@@ -13,6 +13,10 @@
|
|
13
13
|
#include "st.h"
|
14
14
|
#endif
|
15
15
|
|
16
|
+
#ifndef MAYBE_UNUSED
|
17
|
+
# define MAYBE_UNUSED(x) x
|
18
|
+
#endif
|
19
|
+
|
16
20
|
#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
|
17
21
|
|
18
22
|
/* unicode */
|
@@ -63,7 +67,7 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
63
67
|
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
64
68
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
65
69
|
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
66
|
-
static VALUE json_string_unescape(
|
70
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize);
|
67
71
|
static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
68
72
|
static VALUE convert_encoding(VALUE source);
|
69
73
|
static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
|
@@ -452,17 +452,29 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
452
452
|
}
|
453
453
|
}
|
454
454
|
|
455
|
-
static
|
455
|
+
static const size_t MAX_STACK_BUFFER_SIZE = 128;
|
456
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize)
|
456
457
|
{
|
457
|
-
|
458
|
+
VALUE result = Qnil;
|
459
|
+
size_t bufferSize = stringEnd - string;
|
460
|
+
char *p = string, *pe = string, *unescape, *bufferStart, *buffer;
|
458
461
|
int unescape_len;
|
459
462
|
char buf[4];
|
460
463
|
|
464
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
465
|
+
bufferStart = buffer = ALLOC_N(char, bufferSize);
|
466
|
+
} else {
|
467
|
+
bufferStart = buffer = ALLOCA_N(char, bufferSize);
|
468
|
+
}
|
469
|
+
|
461
470
|
while (pe < stringEnd) {
|
462
471
|
if (*pe == '\\') {
|
463
472
|
unescape = (char *) "?";
|
464
473
|
unescape_len = 1;
|
465
|
-
if (pe > p)
|
474
|
+
if (pe > p) {
|
475
|
+
MEMCPY(buffer, p, char, pe - p);
|
476
|
+
buffer += pe - p;
|
477
|
+
}
|
466
478
|
switch (*++pe) {
|
467
479
|
case 'n':
|
468
480
|
unescape = (char *) "\n";
|
@@ -487,6 +499,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
487
499
|
break;
|
488
500
|
case 'u':
|
489
501
|
if (pe > stringEnd - 4) {
|
502
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
503
|
+
free(bufferStart);
|
504
|
+
}
|
490
505
|
rb_enc_raise(
|
491
506
|
EXC_ENCODING eParserError,
|
492
507
|
"%u: incomplete unicode character escape sequence at '%s'", __LINE__, p
|
@@ -497,6 +512,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
497
512
|
if (UNI_SUR_HIGH_START == (ch & 0xFC00)) {
|
498
513
|
pe++;
|
499
514
|
if (pe > stringEnd - 6) {
|
515
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
516
|
+
free(bufferStart);
|
517
|
+
}
|
500
518
|
rb_enc_raise(
|
501
519
|
EXC_ENCODING eParserError,
|
502
520
|
"%u: incomplete surrogate pair at '%s'", __LINE__, p
|
@@ -520,13 +538,55 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
520
538
|
p = pe;
|
521
539
|
continue;
|
522
540
|
}
|
523
|
-
|
541
|
+
MEMCPY(buffer, unescape, char, unescape_len);
|
542
|
+
buffer += unescape_len;
|
524
543
|
p = ++pe;
|
525
544
|
} else {
|
526
545
|
pe++;
|
527
546
|
}
|
528
547
|
}
|
529
|
-
|
548
|
+
|
549
|
+
if (pe > p) {
|
550
|
+
MEMCPY(buffer, p, char, pe - p);
|
551
|
+
buffer += pe - p;
|
552
|
+
}
|
553
|
+
|
554
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
555
|
+
if (intern) {
|
556
|
+
result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding());
|
557
|
+
} else {
|
558
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
559
|
+
}
|
560
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
561
|
+
free(bufferStart);
|
562
|
+
}
|
563
|
+
# else
|
564
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
565
|
+
|
566
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
567
|
+
free(bufferStart);
|
568
|
+
}
|
569
|
+
|
570
|
+
if (intern) {
|
571
|
+
# if STR_UMINUS_DEDUPE_FROZEN
|
572
|
+
// Starting from MRI 2.8 it is preferable to freeze the string
|
573
|
+
// before deduplication so that it can be interned directly
|
574
|
+
// otherwise it would be duplicated first which is wasteful.
|
575
|
+
result = rb_funcall(rb_str_freeze(result), i_uminus, 0);
|
576
|
+
# elif STR_UMINUS_DEDUPE
|
577
|
+
// MRI 2.5 and older do not deduplicate strings that are already
|
578
|
+
// frozen.
|
579
|
+
result = rb_funcall(result, i_uminus, 0);
|
580
|
+
# else
|
581
|
+
result = rb_str_freeze(result);
|
582
|
+
# endif
|
583
|
+
}
|
584
|
+
# endif
|
585
|
+
|
586
|
+
if (symbolize) {
|
587
|
+
result = rb_str_intern(result);
|
588
|
+
}
|
589
|
+
|
530
590
|
return result;
|
531
591
|
}
|
532
592
|
|
@@ -537,12 +597,11 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
537
597
|
write data;
|
538
598
|
|
539
599
|
action parse_string {
|
540
|
-
*result = json_string_unescape(
|
600
|
+
*result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
541
601
|
if (NIL_P(*result)) {
|
542
602
|
fhold;
|
543
603
|
fbreak;
|
544
604
|
} else {
|
545
|
-
FORCE_UTF8(*result);
|
546
605
|
fexec p + 1;
|
547
606
|
}
|
548
607
|
}
|
@@ -569,7 +628,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
569
628
|
int cs = EVIL;
|
570
629
|
VALUE match_string;
|
571
630
|
|
572
|
-
*result = rb_str_buf_new(0);
|
573
631
|
%% write init;
|
574
632
|
json->memo = p;
|
575
633
|
%% write exec;
|
@@ -585,26 +643,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
585
643
|
}
|
586
644
|
}
|
587
645
|
|
588
|
-
if (json->symbolize_names && json->parsing_name) {
|
589
|
-
*result = rb_str_intern(*result);
|
590
|
-
} else if (RB_TYPE_P(*result, T_STRING)) {
|
591
|
-
# if STR_UMINUS_DEDUPE_FROZEN
|
592
|
-
if (json->freeze) {
|
593
|
-
// Starting from MRI 2.8 it is preferable to freeze the string
|
594
|
-
// before deduplication so that it can be interned directly
|
595
|
-
// otherwise it would be duplicated first which is wasteful.
|
596
|
-
*result = rb_funcall(rb_str_freeze(*result), i_uminus, 0);
|
597
|
-
}
|
598
|
-
# elif STR_UMINUS_DEDUPE
|
599
|
-
if (json->freeze) {
|
600
|
-
// MRI 2.5 and older do not deduplicate strings that are already
|
601
|
-
// frozen.
|
602
|
-
*result = rb_funcall(*result, i_uminus, 0);
|
603
|
-
}
|
604
|
-
# else
|
605
|
-
rb_str_resize(*result, RSTRING_LEN(*result));
|
606
|
-
# endif
|
607
|
-
}
|
608
646
|
if (cs >= JSON_string_first_final) {
|
609
647
|
return p + 1;
|
610
648
|
} else {
|
data/json.gemspec
CHANGED
@@ -15,7 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"]
|
16
16
|
s.files = [
|
17
17
|
"CHANGES.md",
|
18
|
-
"Gemfile",
|
19
18
|
"LICENSE",
|
20
19
|
"README.md",
|
21
20
|
"VERSION",
|
@@ -48,13 +47,12 @@ Gem::Specification.new do |s|
|
|
48
47
|
"lib/json/add/time.rb",
|
49
48
|
"lib/json/common.rb",
|
50
49
|
"lib/json/ext.rb",
|
51
|
-
"lib/json/ext/.keep",
|
52
50
|
"lib/json/generic_object.rb",
|
53
51
|
"lib/json/pure.rb",
|
54
52
|
"lib/json/pure/generator.rb",
|
55
53
|
"lib/json/pure/parser.rb",
|
56
54
|
"lib/json/version.rb",
|
57
|
-
]
|
55
|
+
]
|
58
56
|
s.homepage = "http://flori.github.com/json"
|
59
57
|
s.metadata = {
|
60
58
|
'bug_tracker_uri' => 'https://github.com/flori/json/issues',
|
@@ -65,9 +63,5 @@ Gem::Specification.new do |s|
|
|
65
63
|
'wiki_uri' => 'https://github.com/flori/json/wiki'
|
66
64
|
}
|
67
65
|
|
68
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.
|
69
|
-
s.test_files = ["tests/test_helper.rb"]
|
70
|
-
|
71
|
-
s.add_development_dependency "rake"
|
72
|
-
s.add_development_dependency "test-unit"
|
66
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
73
67
|
end
|
data/lib/json/pure/parser.rb
CHANGED
data/lib/json/version.rb
CHANGED
data/lib/json.rb
CHANGED
@@ -493,7 +493,7 @@ require 'json/common'
|
|
493
493
|
# json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]}
|
494
494
|
# ruby1 = JSON.parse(json, create_additions: true) # #<struct Customer name="Dave", address="123 Main">
|
495
495
|
# ruby1.class # Customer
|
496
|
-
|
496
|
+
#
|
497
497
|
# \Symbol:
|
498
498
|
# require 'json/add/symbol'
|
499
499
|
# ruby0 = :foo # foo
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: test-unit
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
11
|
+
date: 2021-10-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
41
13
|
description: This is a JSON implementation as a Ruby extension in C.
|
42
14
|
email: flori@ping.de
|
43
15
|
executables: []
|
@@ -49,7 +21,6 @@ extra_rdoc_files:
|
|
49
21
|
- README.md
|
50
22
|
files:
|
51
23
|
- CHANGES.md
|
52
|
-
- Gemfile
|
53
24
|
- LICENSE
|
54
25
|
- README.md
|
55
26
|
- VERSION
|
@@ -82,62 +53,11 @@ files:
|
|
82
53
|
- lib/json/add/time.rb
|
83
54
|
- lib/json/common.rb
|
84
55
|
- lib/json/ext.rb
|
85
|
-
- lib/json/ext/.keep
|
86
56
|
- lib/json/generic_object.rb
|
87
57
|
- lib/json/pure.rb
|
88
58
|
- lib/json/pure/generator.rb
|
89
59
|
- lib/json/pure/parser.rb
|
90
60
|
- lib/json/version.rb
|
91
|
-
- tests/fixtures/fail10.json
|
92
|
-
- tests/fixtures/fail11.json
|
93
|
-
- tests/fixtures/fail12.json
|
94
|
-
- tests/fixtures/fail13.json
|
95
|
-
- tests/fixtures/fail14.json
|
96
|
-
- tests/fixtures/fail18.json
|
97
|
-
- tests/fixtures/fail19.json
|
98
|
-
- tests/fixtures/fail2.json
|
99
|
-
- tests/fixtures/fail20.json
|
100
|
-
- tests/fixtures/fail21.json
|
101
|
-
- tests/fixtures/fail22.json
|
102
|
-
- tests/fixtures/fail23.json
|
103
|
-
- tests/fixtures/fail24.json
|
104
|
-
- tests/fixtures/fail25.json
|
105
|
-
- tests/fixtures/fail27.json
|
106
|
-
- tests/fixtures/fail28.json
|
107
|
-
- tests/fixtures/fail29.json
|
108
|
-
- tests/fixtures/fail3.json
|
109
|
-
- tests/fixtures/fail30.json
|
110
|
-
- tests/fixtures/fail31.json
|
111
|
-
- tests/fixtures/fail32.json
|
112
|
-
- tests/fixtures/fail4.json
|
113
|
-
- tests/fixtures/fail5.json
|
114
|
-
- tests/fixtures/fail6.json
|
115
|
-
- tests/fixtures/fail7.json
|
116
|
-
- tests/fixtures/fail8.json
|
117
|
-
- tests/fixtures/fail9.json
|
118
|
-
- tests/fixtures/obsolete_fail1.json
|
119
|
-
- tests/fixtures/pass1.json
|
120
|
-
- tests/fixtures/pass15.json
|
121
|
-
- tests/fixtures/pass16.json
|
122
|
-
- tests/fixtures/pass17.json
|
123
|
-
- tests/fixtures/pass2.json
|
124
|
-
- tests/fixtures/pass26.json
|
125
|
-
- tests/fixtures/pass3.json
|
126
|
-
- tests/json_addition_test.rb
|
127
|
-
- tests/json_common_interface_test.rb
|
128
|
-
- tests/json_encoding_test.rb
|
129
|
-
- tests/json_ext_parser_test.rb
|
130
|
-
- tests/json_fixtures_test.rb
|
131
|
-
- tests/json_generator_test.rb
|
132
|
-
- tests/json_generic_object_test.rb
|
133
|
-
- tests/json_parser_test.rb
|
134
|
-
- tests/json_string_matching_test.rb
|
135
|
-
- tests/lib/core_assertions.rb
|
136
|
-
- tests/lib/envutil.rb
|
137
|
-
- tests/lib/find_executable.rb
|
138
|
-
- tests/lib/helper.rb
|
139
|
-
- tests/ractor_test.rb
|
140
|
-
- tests/test_helper.rb
|
141
61
|
homepage: http://flori.github.com/json
|
142
62
|
licenses:
|
143
63
|
- Ruby
|
@@ -160,16 +80,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
80
|
requirements:
|
161
81
|
- - ">="
|
162
82
|
- !ruby/object:Gem::Version
|
163
|
-
version: '2.
|
83
|
+
version: '2.3'
|
164
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
85
|
requirements:
|
166
86
|
- - ">="
|
167
87
|
- !ruby/object:Gem::Version
|
168
88
|
version: '0'
|
169
89
|
requirements: []
|
170
|
-
rubygems_version: 3.
|
90
|
+
rubygems_version: 3.3.0.dev
|
171
91
|
signing_key:
|
172
92
|
specification_version: 4
|
173
93
|
summary: JSON Implementation for Ruby
|
174
|
-
test_files:
|
175
|
-
- tests/test_helper.rb
|
94
|
+
test_files: []
|
data/Gemfile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# vim: set ft=ruby:
|
2
|
-
|
3
|
-
source 'https://rubygems.org'
|
4
|
-
|
5
|
-
case ENV['JSON']
|
6
|
-
when 'ext', nil
|
7
|
-
if ENV['RUBY_ENGINE'] == 'jruby'
|
8
|
-
gemspec :name => 'json-java'
|
9
|
-
else
|
10
|
-
gemspec :name => 'json'
|
11
|
-
end
|
12
|
-
when 'pure'
|
13
|
-
gemspec :name => 'json_pure'
|
14
|
-
end
|
data/lib/json/ext/.keep
DELETED
File without changes
|
data/tests/fixtures/fail10.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Extra value after close": true} "misplaced quoted value"
|
data/tests/fixtures/fail11.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Illegal expression": 1 + 2}
|
data/tests/fixtures/fail12.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Illegal invocation": alert()}
|
data/tests/fixtures/fail13.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Numbers cannot have leading zeroes": 013}
|
data/tests/fixtures/fail14.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Numbers cannot be hex": 0x14}
|
data/tests/fixtures/fail18.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
|
data/tests/fixtures/fail19.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Missing colon" null}
|
data/tests/fixtures/fail2.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Unclosed array"
|
data/tests/fixtures/fail20.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Double colon":: null}
|
data/tests/fixtures/fail21.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Comma instead of colon", null}
|
data/tests/fixtures/fail22.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Colon instead of comma": false]
|
data/tests/fixtures/fail23.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Bad value", truth]
|
data/tests/fixtures/fail24.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
['single quote']
|
data/tests/fixtures/fail25.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["tab character in string "]
|
data/tests/fixtures/fail27.json
DELETED
data/tests/fixtures/fail28.json
DELETED
data/tests/fixtures/fail29.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{
|
data/tests/fixtures/fail3.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{unquoted_key: "keys must be quoted"}
|
data/tests/fixtures/fail30.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
[
|
data/tests/fixtures/fail31.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
[1, 2, 3,
|
data/tests/fixtures/fail32.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"foo": "bar"
|
data/tests/fixtures/fail4.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["extra comma",]
|
data/tests/fixtures/fail5.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["double extra comma",,]
|
data/tests/fixtures/fail6.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
[ , "<-- missing value"]
|
data/tests/fixtures/fail7.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Comma after the close"],
|
data/tests/fixtures/fail8.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Extra close"]]
|
data/tests/fixtures/fail9.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"Extra comma": true,}
|
@@ -1 +0,0 @@
|
|
1
|
-
"A JSON payload should be an object or array, not a string."
|
data/tests/fixtures/pass1.json
DELETED
@@ -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": "" \u0022 %22 0x22 034 "",
|
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"]
|
data/tests/fixtures/pass15.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Illegal backslash escape: \x15"]
|
data/tests/fixtures/pass16.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Illegal backslash escape: \'"]
|
data/tests/fixtures/pass17.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["Illegal backslash escape: \017"]
|
data/tests/fixtures/pass2.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
|
data/tests/fixtures/pass26.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
["tab\ character\ in\ string\ "]
|