douglas crockford presentation jsonsaga

66
The JSON Saga Douglas Crockford Yahoo! Inc.

Upload: ajax-experience-2009

Post on 18-Jun-2015

1.627 views

Category:

Travel


4 download

TRANSCRIPT

Page 1: Douglas Crockford Presentation Jsonsaga

The JSON SagaDouglas Crockford

Yahoo! Inc.

Page 2: Douglas Crockford Presentation Jsonsaga

I am a heretic.

You have been warned.

Page 3: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

2001

Page 5: Douglas Crockford Presentation Jsonsaga

State Software

2002

Page 6: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

Nested HTML

<html><head><script>

document.domain = 'fudco.com';

parent.session.receive(

{"to":"session", "do":"test", "text":"</script>"}

);

</script></head></html>

Page 14: Douglas Crockford Presentation Jsonsaga

Nested HTML

<html><head><script>

document.domain = 'fudco.com';

parent.session.receive(

{"to":"session", "do":"test", "text":"<\/script>"}

);

</script></head></html>

Page 15: Douglas Crockford Presentation Jsonsaga

JSML

JavaScript Message Language

Page 16: Douglas Crockford Presentation Jsonsaga

JSON

JavaScript Object Notation

Page 17: Douglas Crockford Presentation Jsonsaga

JSON was really useful

• Browser/server communication.• Interserver communication.• Configuration.• JSON database.

Page 18: Douglas Crockford Presentation Jsonsaga

Our customers said

• “Never heard of it.”

• “Sorry, our company just committed to XML.”

• “It is not a standard.”

Page 19: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

And that’s all I did.

A message format in a bottle.

Page 21: Douglas Crockford Presentation Jsonsaga

Contributors

Page 22: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

JSON.parse

• Part of ECMAScript, Fifth Edition• Available now in better browsers

everywhere.• Very fast. Very reliable.

Page 28: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

Ajax!2005

Page 30: Douglas Crockford Presentation Jsonsaga

Improvements

• Removed comments. Dangerous practices Unnecessary complexity Alignment with YAML

• Added e notation to numbers.

Page 31: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

Minimalism

It can fit on the back of a business card.

Page 33: Douglas Crockford Presentation Jsonsaga

Influences

Page 34: Douglas Crockford Presentation Jsonsaga

Lisp

S-expressions1958

Page 35: Douglas Crockford Presentation Jsonsaga

Rebol

Page 36: Douglas Crockford Presentation Jsonsaga

JavaScriptPython

NewtonScript

Page 37: Douglas Crockford Presentation Jsonsaga

NeXT

OpenStep Property Lists1993

Page 38: Douglas Crockford Presentation Jsonsaga

XML

The High Priced Spread

Page 39: Douglas Crockford Presentation Jsonsaga

HTML

Always bet on angle brackets.

Page 40: Douglas Crockford Presentation Jsonsaga

Ask not if it is good enough.Ask if it can be popular

enough.

Page 41: Douglas Crockford Presentation Jsonsaga

Maybe only something this simple could work.

John Seely BrownCTO Forum, San Francisco

April 2002

Page 42: Douglas Crockford Presentation Jsonsaga

Maybe only something this complicated could work.

InfoWorld Next-Generation Web Services II: The

ApplicationsSanta Clara

September 2002

Page 43: Douglas Crockford Presentation Jsonsaga

XMLsucks.org

Why XML is technologically terrible, but you have to use it

anyway

Page 44: Douglas Crockford Presentation Jsonsaga

XML is the standard so shut up.

SHUT UP!

Page 45: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

Disruption

Threats

Page 47: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

any damn fool could produce a better data

format than XML

James Clark, 2007-04-06

Page 49: Douglas Crockford Presentation Jsonsaga

Use the right tool for the right job.

When your only tool is a wrench,

every problem looks like a nail.

Page 50: Douglas Crockford Presentation Jsonsaga

Where did the idea come from that data should be

represented by a document format?

Page 51: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

:eol.

::ol.

</ol>

Page 54: Douglas Crockford Presentation Jsonsaga

Brian Reid’s Scribe

@Quote(Any damn fool)

( ) [ ] { } < > " " ' '

@Begin(Quote) Any damn fool@End(Quote)

1980

Page 55: Douglas Crockford Presentation Jsonsaga

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: Douglas Crockford Presentation Jsonsaga

License

MIT

Page 57: Douglas Crockford Presentation Jsonsaga

The Software shall be used

for Good, not Evil.I'm looking at you,Osama bin Laden.

Page 58: Douglas Crockford Presentation Jsonsaga

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 59: Douglas Crockford Presentation Jsonsaga

The JSON Logo

Page 60: Douglas Crockford Presentation Jsonsaga

The Impossible Torus

Page 61: Douglas Crockford Presentation Jsonsaga

Ambihelical Hexnut

Page 62: Douglas Crockford Presentation Jsonsaga
Page 63: Douglas Crockford Presentation Jsonsaga
Page 64: Douglas Crockford Presentation Jsonsaga
Page 65: Douglas Crockford Presentation Jsonsaga
Page 66: Douglas Crockford Presentation Jsonsaga

www.JSON.org