json_pure 1.5.1 → 1.5.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +5 -0
- data/{README → README.rdoc} +0 -0
- data/Rakefile +41 -55
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +11 -10
- data/ext/json/ext/generator/generator.h +3 -3
- data/ext/json/ext/parser/parser.c +81 -71
- data/ext/json/ext/parser/parser.h +5 -5
- data/ext/json/ext/parser/parser.rl +13 -3
- data/java/src/json/ext/Generator.java +1 -5
- data/java/src/json/ext/Parser.java +34 -26
- data/java/src/json/ext/Parser.rl +10 -2
- data/json.gemspec +41 -0
- data/json_pure.gemspec +40 -0
- data/lib/json.rb +52 -0
- data/lib/json/add/core.rb +35 -4
- data/lib/json/common.rb +5 -1
- data/lib/json/pure/generator.rb +1 -1
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +25 -6
- data/tests/test_json_generate.rb +1 -0
- metadata +163 -139
@@ -23,9 +23,9 @@
|
|
23
23
|
|
24
24
|
/* unicode */
|
25
25
|
|
26
|
-
typedef unsigned long
|
27
|
-
typedef unsigned short UTF16;
|
28
|
-
typedef unsigned char
|
26
|
+
typedef unsigned long UTF32; /* at least 32 bits */
|
27
|
+
typedef unsigned short UTF16; /* at least 16 bits */
|
28
|
+
typedef unsigned char UTF8; /* typically 8 bits */
|
29
29
|
|
30
30
|
#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
|
31
31
|
#define UNI_SUR_HIGH_START (UTF32)0xD800
|
@@ -46,8 +46,8 @@ typedef struct JSON_ParserStruct {
|
|
46
46
|
int symbolize_names;
|
47
47
|
VALUE object_class;
|
48
48
|
VALUE array_class;
|
49
|
-
|
50
|
-
|
49
|
+
int create_additions;
|
50
|
+
VALUE match_string;
|
51
51
|
} JSON_Parser;
|
52
52
|
|
53
53
|
#define GET_PARSER \
|
@@ -77,7 +77,7 @@ static VALUE CNaN, CInfinity, CMinusInfinity;
|
|
77
77
|
|
78
78
|
static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
79
79
|
i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_object_class,
|
80
|
-
i_array_class, i_key_p, i_deep_const_get, i_match, i_match_string;
|
80
|
+
i_array_class, i_key_p, i_deep_const_get, i_match, i_match_string, i_aset, i_leftshift;
|
81
81
|
|
82
82
|
%%{
|
83
83
|
machine JSON_common;
|
@@ -119,7 +119,11 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
|
119
119
|
if (np == NULL) {
|
120
120
|
fhold; fbreak;
|
121
121
|
} else {
|
122
|
-
|
122
|
+
if (NIL_P(json->object_class)) {
|
123
|
+
rb_hash_aset(*result, last_name, v);
|
124
|
+
} else {
|
125
|
+
rb_funcall(*result, i_aset, 2, last_name, v);
|
126
|
+
}
|
123
127
|
fexec np;
|
124
128
|
}
|
125
129
|
}
|
@@ -342,7 +346,11 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
342
346
|
if (np == NULL) {
|
343
347
|
fhold; fbreak;
|
344
348
|
} else {
|
345
|
-
|
349
|
+
if (NIL_P(json->array_class)) {
|
350
|
+
rb_ary_push(*result, v);
|
351
|
+
} else {
|
352
|
+
rb_funcall(*result, i_leftshift, 1, v);
|
353
|
+
}
|
346
354
|
fexec np;
|
347
355
|
}
|
348
356
|
}
|
@@ -809,6 +817,8 @@ void Init_parser()
|
|
809
817
|
i_match_string = rb_intern("match_string");
|
810
818
|
i_key_p = rb_intern("key?");
|
811
819
|
i_deep_const_get = rb_intern("deep_const_get");
|
820
|
+
i_aset = rb_intern("[]=");
|
821
|
+
i_leftshift = rb_intern("<<");
|
812
822
|
#ifdef HAVE_RUBY_ENCODING_H
|
813
823
|
CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
|
814
824
|
CEncoding_UTF_16BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16be"));
|
@@ -354,11 +354,7 @@ public final class Generator {
|
|
354
354
|
state.decreaseDepth();
|
355
355
|
if (objectNl.length() != 0) {
|
356
356
|
buffer.append(objectNl);
|
357
|
-
|
358
|
-
for (int i = 0; i < state.getDepth(); i++) {
|
359
|
-
buffer.append(indent);
|
360
|
-
}
|
361
|
-
}
|
357
|
+
buffer.append(Utils.repeat(state.getIndent(), state.getDepth()));
|
362
358
|
}
|
363
359
|
buffer.append((byte)'}');
|
364
360
|
}
|
@@ -1528,7 +1528,7 @@ static final int JSON_array_error = 0;
|
|
1528
1528
|
static final int JSON_array_en_main = 1;
|
1529
1529
|
|
1530
1530
|
|
1531
|
-
// line
|
1531
|
+
// line 624 "Parser.rl"
|
1532
1532
|
|
1533
1533
|
|
1534
1534
|
ParserResult parseArray(int p, int pe) {
|
@@ -1551,7 +1551,7 @@ static final int JSON_array_en_main = 1;
|
|
1551
1551
|
cs = JSON_array_start;
|
1552
1552
|
}
|
1553
1553
|
|
1554
|
-
// line
|
1554
|
+
// line 641 "Parser.rl"
|
1555
1555
|
|
1556
1556
|
// line 1557 "Parser.java"
|
1557
1557
|
{
|
@@ -1641,19 +1641,23 @@ case 1:
|
|
1641
1641
|
p--;
|
1642
1642
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
1643
1643
|
} else {
|
1644
|
-
|
1644
|
+
if (!parser.arrayClass.getName().equals("Array")) {
|
1645
|
+
result.callMethod(context, "<<", res.result);
|
1646
|
+
} else {
|
1647
|
+
result.append(res.result);
|
1648
|
+
}
|
1645
1649
|
{p = (( res.p))-1;}
|
1646
1650
|
}
|
1647
1651
|
}
|
1648
1652
|
break;
|
1649
1653
|
case 1:
|
1650
|
-
// line
|
1654
|
+
// line 608 "Parser.rl"
|
1651
1655
|
{
|
1652
1656
|
p--;
|
1653
1657
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
1654
1658
|
}
|
1655
1659
|
break;
|
1656
|
-
// line
|
1660
|
+
// line 1661 "Parser.java"
|
1657
1661
|
}
|
1658
1662
|
}
|
1659
1663
|
}
|
@@ -1673,7 +1677,7 @@ case 5:
|
|
1673
1677
|
break; }
|
1674
1678
|
}
|
1675
1679
|
|
1676
|
-
// line
|
1680
|
+
// line 642 "Parser.rl"
|
1677
1681
|
|
1678
1682
|
if (cs >= JSON_array_first_final) {
|
1679
1683
|
return new ParserResult(result, p + 1);
|
@@ -1683,7 +1687,7 @@ case 5:
|
|
1683
1687
|
}
|
1684
1688
|
|
1685
1689
|
|
1686
|
-
// line
|
1690
|
+
// line 1691 "Parser.java"
|
1687
1691
|
private static byte[] init__JSON_object_actions_0()
|
1688
1692
|
{
|
1689
1693
|
return new byte [] {
|
@@ -1806,7 +1810,7 @@ static final int JSON_object_error = 0;
|
|
1806
1810
|
static final int JSON_object_en_main = 1;
|
1807
1811
|
|
1808
1812
|
|
1809
|
-
// line
|
1813
|
+
// line 702 "Parser.rl"
|
1810
1814
|
|
1811
1815
|
|
1812
1816
|
ParserResult parseObject(int p, int pe) {
|
@@ -1825,14 +1829,14 @@ static final int JSON_object_en_main = 1;
|
|
1825
1829
|
IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
|
1826
1830
|
|
1827
1831
|
|
1828
|
-
// line
|
1832
|
+
// line 1833 "Parser.java"
|
1829
1833
|
{
|
1830
1834
|
cs = JSON_object_start;
|
1831
1835
|
}
|
1832
1836
|
|
1833
|
-
// line
|
1837
|
+
// line 720 "Parser.rl"
|
1834
1838
|
|
1835
|
-
// line
|
1839
|
+
// line 1840 "Parser.java"
|
1836
1840
|
{
|
1837
1841
|
int _klen;
|
1838
1842
|
int _trans = 0;
|
@@ -1913,20 +1917,24 @@ case 1:
|
|
1913
1917
|
switch ( _JSON_object_actions[_acts++] )
|
1914
1918
|
{
|
1915
1919
|
case 0:
|
1916
|
-
// line
|
1920
|
+
// line 656 "Parser.rl"
|
1917
1921
|
{
|
1918
1922
|
ParserResult res = parseValue(p, pe);
|
1919
1923
|
if (res == null) {
|
1920
1924
|
p--;
|
1921
1925
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
1922
1926
|
} else {
|
1923
|
-
|
1927
|
+
if (!parser.objectClass.getName().equals("Hash")) {
|
1928
|
+
result.callMethod(context, "[]=", new IRubyObject[] { lastName, res.result });
|
1929
|
+
} else {
|
1930
|
+
result.op_aset(context, lastName, res.result);
|
1931
|
+
}
|
1924
1932
|
{p = (( res.p))-1;}
|
1925
1933
|
}
|
1926
1934
|
}
|
1927
1935
|
break;
|
1928
1936
|
case 1:
|
1929
|
-
// line
|
1937
|
+
// line 671 "Parser.rl"
|
1930
1938
|
{
|
1931
1939
|
ParserResult res = parseString(p, pe);
|
1932
1940
|
if (res == null) {
|
@@ -1946,13 +1954,13 @@ case 1:
|
|
1946
1954
|
}
|
1947
1955
|
break;
|
1948
1956
|
case 2:
|
1949
|
-
// line
|
1957
|
+
// line 689 "Parser.rl"
|
1950
1958
|
{
|
1951
1959
|
p--;
|
1952
1960
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
1953
1961
|
}
|
1954
1962
|
break;
|
1955
|
-
// line
|
1963
|
+
// line 1964 "Parser.java"
|
1956
1964
|
}
|
1957
1965
|
}
|
1958
1966
|
}
|
@@ -1972,7 +1980,7 @@ case 5:
|
|
1972
1980
|
break; }
|
1973
1981
|
}
|
1974
1982
|
|
1975
|
-
// line
|
1983
|
+
// line 721 "Parser.rl"
|
1976
1984
|
|
1977
1985
|
if (cs < JSON_object_first_final) {
|
1978
1986
|
return null;
|
@@ -1998,7 +2006,7 @@ case 5:
|
|
1998
2006
|
}
|
1999
2007
|
|
2000
2008
|
|
2001
|
-
// line
|
2009
|
+
// line 2010 "Parser.java"
|
2002
2010
|
private static byte[] init__JSON_actions_0()
|
2003
2011
|
{
|
2004
2012
|
return new byte [] {
|
@@ -2102,7 +2110,7 @@ static final int JSON_error = 0;
|
|
2102
2110
|
static final int JSON_en_main = 1;
|
2103
2111
|
|
2104
2112
|
|
2105
|
-
// line
|
2113
|
+
// line 779 "Parser.rl"
|
2106
2114
|
|
2107
2115
|
|
2108
2116
|
public IRubyObject parse() {
|
@@ -2111,16 +2119,16 @@ static final int JSON_en_main = 1;
|
|
2111
2119
|
IRubyObject result = null;
|
2112
2120
|
|
2113
2121
|
|
2114
|
-
// line
|
2122
|
+
// line 2123 "Parser.java"
|
2115
2123
|
{
|
2116
2124
|
cs = JSON_start;
|
2117
2125
|
}
|
2118
2126
|
|
2119
|
-
// line
|
2127
|
+
// line 787 "Parser.rl"
|
2120
2128
|
p = byteList.begin();
|
2121
2129
|
pe = p + byteList.length();
|
2122
2130
|
|
2123
|
-
// line
|
2131
|
+
// line 2132 "Parser.java"
|
2124
2132
|
{
|
2125
2133
|
int _klen;
|
2126
2134
|
int _trans = 0;
|
@@ -2201,7 +2209,7 @@ case 1:
|
|
2201
2209
|
switch ( _JSON_actions[_acts++] )
|
2202
2210
|
{
|
2203
2211
|
case 0:
|
2204
|
-
// line
|
2212
|
+
// line 751 "Parser.rl"
|
2205
2213
|
{
|
2206
2214
|
currentNesting = 1;
|
2207
2215
|
ParserResult res = parseObject(p, pe);
|
@@ -2215,7 +2223,7 @@ case 1:
|
|
2215
2223
|
}
|
2216
2224
|
break;
|
2217
2225
|
case 1:
|
2218
|
-
// line
|
2226
|
+
// line 763 "Parser.rl"
|
2219
2227
|
{
|
2220
2228
|
currentNesting = 1;
|
2221
2229
|
ParserResult res = parseArray(p, pe);
|
@@ -2228,7 +2236,7 @@ case 1:
|
|
2228
2236
|
}
|
2229
2237
|
}
|
2230
2238
|
break;
|
2231
|
-
// line
|
2239
|
+
// line 2240 "Parser.java"
|
2232
2240
|
}
|
2233
2241
|
}
|
2234
2242
|
}
|
@@ -2248,7 +2256,7 @@ case 5:
|
|
2248
2256
|
break; }
|
2249
2257
|
}
|
2250
2258
|
|
2251
|
-
// line
|
2259
|
+
// line 790 "Parser.rl"
|
2252
2260
|
|
2253
2261
|
if (cs >= JSON_first_final && p == pe) {
|
2254
2262
|
return result;
|
data/java/src/json/ext/Parser.rl
CHANGED
@@ -596,7 +596,11 @@ public class Parser extends RubyObject {
|
|
596
596
|
fhold;
|
597
597
|
fbreak;
|
598
598
|
} else {
|
599
|
-
|
599
|
+
if (!parser.arrayClass.getName().equals("Array")) {
|
600
|
+
result.callMethod(context, "<<", res.result);
|
601
|
+
} else {
|
602
|
+
result.append(res.result);
|
603
|
+
}
|
600
604
|
fexec res.p;
|
601
605
|
}
|
602
606
|
}
|
@@ -655,7 +659,11 @@ public class Parser extends RubyObject {
|
|
655
659
|
fhold;
|
656
660
|
fbreak;
|
657
661
|
} else {
|
658
|
-
|
662
|
+
if (!parser.objectClass.getName().equals("Hash")) {
|
663
|
+
result.callMethod(context, "[]=", new IRubyObject[] { lastName, res.result });
|
664
|
+
} else {
|
665
|
+
result.op_aset(context, lastName, res.result);
|
666
|
+
}
|
659
667
|
fexec res.p;
|
660
668
|
}
|
661
669
|
}
|
data/json.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{json}
|
5
|
+
s.version = "1.5.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = [%q{Florian Frank}]
|
9
|
+
s.date = %q{2011-06-14}
|
10
|
+
s.description = %q{This is a JSON implementation as a Ruby extension in C.}
|
11
|
+
s.email = %q{flori@ping.de}
|
12
|
+
s.executables = [%q{edit_json.rb}, %q{prettify_json.rb}]
|
13
|
+
s.extensions = [%q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/generator/extconf.rb}]
|
14
|
+
s.extra_rdoc_files = [%q{README.rdoc}]
|
15
|
+
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/json.xpm}, %q{lib/json/TrueClass.xpm}, %q{lib/json/version.rb}, %q{lib/json/Array.xpm}, %q{lib/json/add}, %q{lib/json/add/core.rb}, %q{lib/json/add/rails.rb}, %q{lib/json/common.rb}, %q{lib/json/pure}, %q{lib/json/pure/generator.rb}, %q{lib/json/pure/parser.rb}, %q{lib/json/ext.rb}, %q{lib/json/pure.rb}, %q{lib/json/Key.xpm}, %q{lib/json/FalseClass.xpm}, %q{lib/json/editor.rb}, %q{lib/json/Numeric.xpm}, %q{lib/json/ext}, %q{lib/json/ext/1.9}, %q{lib/json/ext/1.8}, %q{lib/json/NilClass.xpm}, %q{lib/json/String.xpm}, %q{lib/json/Hash.xpm}, %q{lib/json.rb}, %q{README.rdoc}, %q{json_pure.gemspec}, %q{GPL}, %q{CHANGES}, %q{bin}, %q{bin/prettify_json.rb}, %q{bin/edit_json.rb}, %q{COPYING-json-jruby}, %q{ext}, %q{ext/json}, %q{ext/json/ext}, %q{ext/json/ext/parser}, %q{ext/json/ext/parser/parser.h}, %q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/parser/parser.rl}, %q{ext/json/ext/parser/parser.c}, %q{ext/json/ext/generator}, %q{ext/json/ext/generator/generator.c}, %q{ext/json/ext/generator/extconf.rb}, %q{ext/json/ext/generator/generator.h}, %q{VERSION}, %q{data}, %q{data/prototype.js}, %q{data/index.html}, %q{data/example.json}, %q{json.gemspec}, %q{java}, %q{java/src}, %q{java/src/json}, %q{java/src/json/ext}, %q{java/src/json/ext/Parser.java}, %q{java/src/json/ext/RuntimeInfo.java}, %q{java/src/json/ext/GeneratorState.java}, %q{java/src/json/ext/OptionsReader.java}, %q{java/src/json/ext/ParserService.java}, %q{java/src/json/ext/Parser.rl}, %q{java/src/json/ext/StringEncoder.java}, %q{java/src/json/ext/GeneratorService.java}, %q{java/src/json/ext/Utils.java}, %q{java/src/json/ext/StringDecoder.java}, %q{java/src/json/ext/Generator.java}, %q{java/src/json/ext/ByteListTranscoder.java}, %q{java/src/json/ext/GeneratorMethods.java}, %q{java/lib}, %q{java/lib/bytelist-1.0.6.jar}, %q{java/lib/jcodings.jar}, %q{diagrams}, %q{README-json-jruby.markdown}, %q{install.rb}, %q{json-java.gemspec}, %q{tools}, %q{tools/fuzz.rb}, %q{tools/server.rb}, %q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
16
|
+
s.homepage = %q{http://flori.github.com/json}
|
17
|
+
s.rdoc_options = [%q{--title}, %q{JSON implemention for Ruby}, %q{--main}, %q{README.rdoc}]
|
18
|
+
s.require_paths = [%q{ext/json/ext}, %q{ext}, %q{lib}]
|
19
|
+
s.rubyforge_project = %q{json}
|
20
|
+
s.rubygems_version = %q{1.8.5}
|
21
|
+
s.summary = %q{JSON Implementation for Ruby}
|
22
|
+
s.test_files = [%q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_development_dependency(%q<permutation>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<bullshit>, [">= 0"])
|
30
|
+
s.add_development_dependency(%q<sdoc>, [">= 0"])
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<permutation>, [">= 0"])
|
33
|
+
s.add_dependency(%q<bullshit>, [">= 0"])
|
34
|
+
s.add_dependency(%q<sdoc>, [">= 0"])
|
35
|
+
end
|
36
|
+
else
|
37
|
+
s.add_dependency(%q<permutation>, [">= 0"])
|
38
|
+
s.add_dependency(%q<bullshit>, [">= 0"])
|
39
|
+
s.add_dependency(%q<sdoc>, [">= 0"])
|
40
|
+
end
|
41
|
+
end
|
data/json_pure.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{json_pure}
|
5
|
+
s.version = "1.5.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = [%q{Florian Frank}]
|
9
|
+
s.date = %q{2011-06-14}
|
10
|
+
s.description = %q{This is a JSON implementation in pure Ruby.}
|
11
|
+
s.email = %q{flori@ping.de}
|
12
|
+
s.executables = [%q{edit_json.rb}, %q{prettify_json.rb}]
|
13
|
+
s.extra_rdoc_files = [%q{README.rdoc}]
|
14
|
+
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/json.xpm}, %q{lib/json/TrueClass.xpm}, %q{lib/json/version.rb}, %q{lib/json/Array.xpm}, %q{lib/json/add}, %q{lib/json/add/core.rb}, %q{lib/json/add/rails.rb}, %q{lib/json/common.rb}, %q{lib/json/pure}, %q{lib/json/pure/generator.rb}, %q{lib/json/pure/parser.rb}, %q{lib/json/ext.rb}, %q{lib/json/pure.rb}, %q{lib/json/Key.xpm}, %q{lib/json/FalseClass.xpm}, %q{lib/json/editor.rb}, %q{lib/json/Numeric.xpm}, %q{lib/json/ext}, %q{lib/json/ext/1.9}, %q{lib/json/ext/1.8}, %q{lib/json/NilClass.xpm}, %q{lib/json/String.xpm}, %q{lib/json/Hash.xpm}, %q{lib/json.rb}, %q{README.rdoc}, %q{json_pure.gemspec}, %q{GPL}, %q{CHANGES}, %q{bin}, %q{bin/prettify_json.rb}, %q{bin/edit_json.rb}, %q{COPYING-json-jruby}, %q{ext}, %q{ext/json}, %q{ext/json/ext}, %q{ext/json/ext/parser}, %q{ext/json/ext/parser/parser.h}, %q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/parser/parser.rl}, %q{ext/json/ext/parser/parser.c}, %q{ext/json/ext/generator}, %q{ext/json/ext/generator/generator.c}, %q{ext/json/ext/generator/extconf.rb}, %q{ext/json/ext/generator/generator.h}, %q{VERSION}, %q{data}, %q{data/prototype.js}, %q{data/index.html}, %q{data/example.json}, %q{json.gemspec}, %q{java}, %q{java/src}, %q{java/src/json}, %q{java/src/json/ext}, %q{java/src/json/ext/Parser.java}, %q{java/src/json/ext/RuntimeInfo.java}, %q{java/src/json/ext/GeneratorState.java}, %q{java/src/json/ext/OptionsReader.java}, %q{java/src/json/ext/ParserService.java}, %q{java/src/json/ext/Parser.rl}, %q{java/src/json/ext/StringEncoder.java}, %q{java/src/json/ext/GeneratorService.java}, %q{java/src/json/ext/Utils.java}, %q{java/src/json/ext/StringDecoder.java}, %q{java/src/json/ext/Generator.java}, %q{java/src/json/ext/ByteListTranscoder.java}, %q{java/src/json/ext/GeneratorMethods.java}, %q{java/lib}, %q{java/lib/bytelist-1.0.6.jar}, %q{java/lib/jcodings.jar}, %q{diagrams}, %q{README-json-jruby.markdown}, %q{install.rb}, %q{json-java.gemspec}, %q{tools}, %q{tools/fuzz.rb}, %q{tools/server.rb}, %q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
15
|
+
s.homepage = %q{http://flori.github.com/json}
|
16
|
+
s.rdoc_options = [%q{--title}, %q{JSON implemention for ruby}, %q{--main}, %q{README.rdoc}]
|
17
|
+
s.require_paths = [%q{lib}]
|
18
|
+
s.rubyforge_project = %q{json}
|
19
|
+
s.rubygems_version = %q{1.8.5}
|
20
|
+
s.summary = %q{JSON Implementation for Ruby}
|
21
|
+
s.test_files = [%q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
s.specification_version = 3
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_development_dependency(%q<permutation>, [">= 0"])
|
28
|
+
s.add_development_dependency(%q<bullshit>, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<sdoc>, [">= 0"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<permutation>, [">= 0"])
|
32
|
+
s.add_dependency(%q<bullshit>, [">= 0"])
|
33
|
+
s.add_dependency(%q<sdoc>, [">= 0"])
|
34
|
+
end
|
35
|
+
else
|
36
|
+
s.add_dependency(%q<permutation>, [">= 0"])
|
37
|
+
s.add_dependency(%q<bullshit>, [">= 0"])
|
38
|
+
s.add_dependency(%q<sdoc>, [">= 0"])
|
39
|
+
end
|
40
|
+
end
|
data/lib/json.rb
CHANGED
@@ -1,3 +1,55 @@
|
|
1
|
+
##
|
2
|
+
# = JavaScript Object Notation (JSON)
|
3
|
+
#
|
4
|
+
# JSON is a lightweight data-interchange format. It is easy for us
|
5
|
+
# humans to read and write. Plus, equally simple for machines to generate or parse.
|
6
|
+
# JSON is completely language agnostic, making it the ideal interchange format.
|
7
|
+
#
|
8
|
+
# Built on two universally available structures:
|
9
|
+
# 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array.
|
10
|
+
# 2. An orderd list of values. More commonly named as an _array_, vector, sequence, or list.
|
11
|
+
#
|
12
|
+
# To read more about JSON visit: http://json.org
|
13
|
+
#
|
14
|
+
# == Parsing JSON
|
15
|
+
#
|
16
|
+
# To parse a JSON string received by another application, or generated within
|
17
|
+
# your existing application:
|
18
|
+
#
|
19
|
+
# require 'json'
|
20
|
+
#
|
21
|
+
# my_hash = JSON.parse('{"hello": "goodbye"}')
|
22
|
+
# puts my_hash["hello"] => "goodbye"
|
23
|
+
#
|
24
|
+
# Notice the extra quotes <tt>''</tt> around the hash notation. Ruby expects
|
25
|
+
# the argument to be a string and can't convert objects like a hash or array.
|
26
|
+
#
|
27
|
+
# Ruby converts your string into a hash
|
28
|
+
#
|
29
|
+
# == Generating JSON
|
30
|
+
#
|
31
|
+
# Creating a JSON string for communication or serialization is
|
32
|
+
# just as simple.
|
33
|
+
#
|
34
|
+
# require 'json'
|
35
|
+
#
|
36
|
+
# my_hash = {:hello => "goodbye"}
|
37
|
+
# puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}"
|
38
|
+
#
|
39
|
+
# Or an alternative way:
|
40
|
+
#
|
41
|
+
# require 'json'
|
42
|
+
# puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}"
|
43
|
+
#
|
44
|
+
# <tt>JSON.generate</tt> only allows objects or arrays to be converted
|
45
|
+
# to JSON syntax. While <tt>to_json</tt> accepts many Ruby classes
|
46
|
+
# even though it only acts a method for serialization:
|
47
|
+
#
|
48
|
+
# require 'json'
|
49
|
+
#
|
50
|
+
# 1.to_json => "1"
|
51
|
+
#
|
52
|
+
|
1
53
|
require 'json/common'
|
2
54
|
module JSON
|
3
55
|
require 'json/version'
|