The JSON Saga
-
Upload
kaven-yan -
Category
Technology
-
view
1.599 -
download
1
description
Transcript of The JSON Saga
![Page 1: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/1.jpg)
The JSON SagaDouglas Crockford
Yahoo! Inc.
![Page 2: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/2.jpg)
I am a heretic.
You have been warned.
![Page 3: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/3.jpg)
I Discovered JSON
• I do not claim to have invented JSON.
It already existed in nature. • I do not claim to have been the first
to discover it. • I gave it a specification and a little
website.• The rest happened by itself.
![Page 4: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/4.jpg)
2001
![Page 5: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/5.jpg)
State Software
2002
![Page 6: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/6.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 7: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/7.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 8: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/8.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 9: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/9.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 10: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/10.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 11: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/11.jpg)
The Very First JSON MessageApril 2001
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{to:"session", do:"test", text:"Hello world"}
);
</script></head></html>
![Page 12: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/12.jpg)
The unquoted name problem
• ES3 has a wack reserved word policy.• Reserved words must be quoted.• I did not want to put the list of
reserved words in the JSON spec, so...
• All keys must be quoted.• It significantly simplified JSON.• This conforms to Python.
![Page 13: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/13.jpg)
Nested HTML
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{"to":"session", "do":"test", "text":"</script>"}
);
</script></head></html>
![Page 14: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/14.jpg)
Nested HTML
<html><head><script>
document.domain = 'fudco.com';
parent.session.receive(
{"to":"session", "do":"test", "text":"<\/script>"}
);
</script></head></html>
![Page 15: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/15.jpg)
JSML
JavaScript Message Language
![Page 16: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/16.jpg)
JSON
JavaScript Object Notation
![Page 17: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/17.jpg)
JSON was really useful
• Browser/server communication.• Interserver communication.• JSON database.
![Page 18: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/18.jpg)
Our customers said
• “Never heard of it.”
• “Sorry, our company just committed to XML.”
• “It is not a standard.”
![Page 19: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/19.jpg)
I bought JSON.org
• A one-page web site that described JSON.
• Grammar three ways Simplified BNF Railroad diagrams Informal English
• A Java reference implementation.
• And then I retired.
![Page 20: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/20.jpg)
And that’s all I did.
A message format in a bottle.
![Page 21: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/21.jpg)
Contributors
![Page 22: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/22.jpg)
Languages• ActionScript• C• C++• C#• ColdFusion• D• Delphi• E• Eiffel• Erlang• Fan• Flex• Haskell• haXe• Java• JavaScript• Lasso• Lisp• LotusScript• Lua
• Objective C• Objective CAML• OpenLaszlo• Perl• PHP• Pike• pl/sql• PowerShell• Prolog• Python• R• REALbasic• Rebol• Ruby• Scheme• Squeak• Tcl• Visual Basic• Visual FoxPro
![Page 23: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/23.jpg)
JSON is the intersection of modern programming
languages
• Simple values number string boolean
• Sequence of values array, vector, list
• Collection of named values object, record, struct, hash, property list
![Page 24: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/24.jpg)
Recursive descent value = function () {
// Parse a JSON value. It could be an object, an array,// a string, a number, or a word.
white(); switch (ch) { case '{': return object(); case '[': return array(); case '"': return string(); case '-': return number(); default: return ch >= '0' && ch <= '9' ? number() : word(); } };
![Page 25: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/25.jpg)
State Machinestate = 'go';stack = [];try { for (;;) { r = tx.exec(source); if (!r) { break; } if (r[1]) { action[r[1]][state](); } else if (r[2]) { value = +r[2]; number[state](); } else { value = debackslashify(r[3]); string[state](); } source = source.slice(r[0].length); }}
![Page 26: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/26.jpg)
Eval if (/^[\],:{}\s]*$/.test(text.replace( /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/
g, ']'). replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
// In the third stage we use the eval function to compile the // text into a JavaScript structure. The '{' operator is subject // to a syntactic ambiguity in JavaScript: it can begin a block // or an object literal. We wrap the text in parens to eliminate // the ambiguity.
j = eval('(' + text + ')');
![Page 27: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/27.jpg)
JSON.parse
• Part of ECMAScript, Fifth Edition• Available now in better browsers
everywhere.• Very fast. Very reliable.
![Page 28: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/28.jpg)
Languages
• Arabic • Bulgarian • Chinese • Czech • Dutch • French • German • Greek • Hebrew • Hungarian • Indonesian
• Italian • Japanese • Korean • Persian • Polish • Portuguese • Russian • Slovenian • Spanish • Turkish • Vietnamese
![Page 29: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/29.jpg)
Ajax!2005
![Page 30: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/30.jpg)
Improvements
• Removed comments. Dangerous practices Unnecessary complexity Alignment with YAML
• Added e notation to numbers.
![Page 31: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/31.jpg)
No version number.
• JSON will not be changed.• Stability is more important than any
feature we can think of.• Perhaps someday it will be replaced.
![Page 32: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/32.jpg)
Minimalism
It can fit on the back of a business card.
![Page 33: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/33.jpg)
Influences
![Page 34: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/34.jpg)
Lisp
S-expressions1958
![Page 35: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/35.jpg)
Rebol
![Page 36: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/36.jpg)
JavaScriptPython
NewtonScript
![Page 37: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/37.jpg)
NeXT
OpenStep Property Lists1993
![Page 38: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/38.jpg)
XML
The High Priced Spread
![Page 39: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/39.jpg)
HTML
Always bet on angle brackets.
![Page 40: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/40.jpg)
Ask not if it is good enough.Ask if it can be popular
enough.
![Page 41: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/41.jpg)
Maybe only something this simple could work.
John Seely Brown, April 2002
![Page 42: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/42.jpg)
Maybe only something this complicated could work.
2002
![Page 43: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/43.jpg)
XMLsucks.org
Why XML is technologically terrible, but you have to use it
anyway
![Page 44: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/44.jpg)
XML is the standard so shut up.
SHUT UP!
![Page 45: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/45.jpg)
XML Alternatives
• JSON config YAML CanonML HDF SSYN OGDL SDL DL Boulder ONX SMEL Property lists ConfigObj GroovyMarkup ATerms LNML GODDAG JITTs Esis/Pyxie ConciseXML SML TexMecs A specification language Waterken doc UBF Xqueeze Ool atx Grutatxt APT txt2docbook txt2tags AsciiDoc reStructuredText Epytext EtText AFT txt2html Setext Latte Confluence Markdown SmartyPants Textile Atox CDuce MarkupMatrix WikiMl IWML SEXP sfsexp Lambda markup language SXML Better markup tXML SOX SLiP ezex Tanga (NBML) XSLScript & TerseXML Lx NiceXSL PXSL ShoXS XSCS SML MIN MINML ESPX PXML GMarkup ASN BLOB SDXF CTX ASDL WDDX REBOL
• http://www.pault.com/pault/pxml/xmlalternatives.html
![Page 46: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/46.jpg)
Disruption
Threats
![Page 47: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/47.jpg)
It’s not even XML!Who did this travesty?
Let’s find a tree and string them up. Now.
Dave Winer, 2006-12-20
![Page 48: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/48.jpg)
any damn fool could produce a better data
format than XML
James Clark, 2007-04-06
![Page 49: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/49.jpg)
Use the right tool for the right job.
When your only tool is a wrench,
every problem looks like a nail.
![Page 50: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/50.jpg)
Where did the idea come from that data should be
represented by a document format?
![Page 51: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/51.jpg)
RUNOFF.SK 1Text processing and word processing systemstypically require additional information tobe interspersed among the natural text ofthe document being processed. This addedinformation, called "markup", serves twopurposes:.TB 4.OF 4.SK 11.#Separating the logical elements of thedocument; and.OF 4.SK 12.#Specifying the processing functions to beperformed on those elements..OF 0.SK 1
![Page 52: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/52.jpg)
GML :h1.Chapter 1: Introduction :p.GML supported hierarchical containers, such as :ol :li.Ordered lists (like this one), :li.Unordered lists, and :li.Definition lists :eol. as well as simple structures. :p.Markup minimization (later generalized and formalized in SGML), allowed the end-tags to be omitted for the "h1" and "p" elements.
![Page 53: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/53.jpg)
:eol.
::ol.
</ol>
![Page 54: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/54.jpg)
Brian Reid’s Scribe
@Quote(Any damn fool)
( ) [ ] { } < > " " ' '
@Begin(Quote) Any damn fool@End(Quote)
1980
![Page 55: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/55.jpg)
Scribe
@techreport(PUB, key="Tesler", author="Tesler, Larry", title="PUB: The Document Compiler", year=1972, number="ON-72", month="Sep", institution="Stanford University Artificial Intelligence Project")
@book(Volume3, key="Knuth", author="Knuth, Donald E.", title="Sorting and Searching", publisher="Addison-Wesley",year=1973, volume=3,
series="The Art of Computer Programming", address="Reading, Mass.")
![Page 56: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/56.jpg)
License
The Software shall be used for Good, not Evil.
![Page 57: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/57.jpg)
I give permission to IBM, its customers, partners, and
minions, to use JSLint for evil.
Thanks very much, Douglas! Staff Attorney, IP Law
IBM Corporation
![Page 58: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/58.jpg)
The JSON Logo
![Page 59: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/59.jpg)
The Impossible Torus
![Page 60: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/60.jpg)
Ambihelical Hexnut
![Page 61: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/61.jpg)
![Page 62: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/62.jpg)
![Page 63: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/63.jpg)
![Page 64: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/64.jpg)
![Page 65: The JSON Saga](https://reader033.fdocuments.in/reader033/viewer/2022061519/554f6db5b4c905c8088b5373/html5/thumbnails/65.jpg)
www.JSON.org