JSON The x in Ajax Douglas Crockford Yahoo! Inc..

Slides:



Advertisements
Similar presentations
XML-XSL Introduction SHIJU RAJAN SHIJU RAJAN Outline Brief Overview Brief Overview What is XML? What is XML? Well Formed XML Well Formed XML Tag Name.
Advertisements

JavaScript I. JavaScript is an object oriented programming language used to add interactivity to web pages. Different from Java, even though bears some.
Javascript Client-side scripting. Up to now  We've seen a little about how to control  content with HTML  presentation with CSS  Javascript is a language.
JSON The Data Transfer Format of the Stars Douglas Crockford Yahoo! Inc.
XML(EXtensible Markup Language). XML XML stands for EXtensible Markup Language. XML is a markup language much like HTML. XML was designed to describe.
15-Jul-15 JSON. JSON example “JSON” stands for “JavaScript Object Notation” Despite the name, JSON is a (mostly) language-independent way of specifying.
Taking JavaScript Seriously IS NOT THE WORST IDEA.
JSON (JavaScript Object Notation).  A lightweight data-interchange format  A subset of the object literal notation of JavaScript (or ECMA-262).  A.
Introduction to PHP and Server Side Technology. Slide 2 PHP History Created in 1995 PHP 5.0 is the current version It’s been around since 2004.
FALL 2005CSI 4118 – UNIVERSITY OF OTTAWA1 Part 4 Web technologies: HTTP, CGI, PHP,Java applets)
XML introduction to Ahmed I. Deeb Dr. Anwar Mousa  presenter  instructor University Of Palestine-2009.
JavaScript, Fifth Edition Chapter 1 Introduction to JavaScript.
JSON The Fat Free Alternative to XML. Data Interchange The key idea in Ajax. An alternative to page replacement. Applications delivered as pages. How.
1Computer Sciences Department Princess Nourah bint Abdulrahman University.
CNIT 133 Interactive Web Pags – JavaScript and AJAX JavaScript Environment.
XML 1 Enterprise Applications CE00465-M XML. 2 Enterprise Applications CE00465-M XML Overview Extensible Mark-up Language (XML) is a meta-language that.
 XML is designed to describe data and to focus on what data is. HTML is designed to display data and to focus on how data looks.  XML is created to structure,
Processing of structured documents Spring 2002, Part 2 Helena Ahonen-Myka.
Chapter 8 Cookies And Security JavaScript, Third Edition.
Introduction to JavaScript Gordon Tian
INTRODUCTION TO JAVASCRIPT AND DOM Internet Engineering Spring 2012.
Serialization. Serialization is the process of converting an object into an intermediate format that can be stored (e.g. in a file or transmitted across.
School of Computing and Information Systems CS 371 Web Application Programming XML and JSON Encoding Data.
JSON Java Script Object Notation Copyright © 2013 Curt Hill.
JSON and A Comparison of Scripts. JSON: JavaScript Object Notation Based on a subset of the JavaScript Programming Language provides a standardized data.
Overview of Form and Javascript fundamentals. Brief matching exercise 1. This is the software that allows a user to access and view HTML documents 2.
Web Technologies Lecture 4 XML and XHTML. XML Extensible Markup Language Set of rules for encoding a document in a format readable – By humans, and –
XML CSC1310 Fall HTML (TIM BERNERS-LEE) HyperText Markup Language  HTML (HyperText Markup Language): December  Markup  Markup is a symbol.
JSON – Java Script Object Notation. What is JSON JSON is a data interchange format Interactive Web 2.0 applications, no more use page replacement. Data.
 Web pages originally static  Page is delivered exactly as stored on server  Same information displayed for all users, from all contexts  Dynamic.
Objective: To describe the evolution of the Internet and the Web. Explain the need for web standards. Describe universal design. Identify benefits of accessible.
AJAX. Ajax  $.get  $.post  $.getJSON  $.ajax  json and xml  Looping over data results, success and error callbacks.
AJAX and REST. Slide 2 What is AJAX? It’s an acronym for Asynchronous JavaScript and XML Although requests need not be asynchronous It’s not really a.
OVERVIEW AND PARSING JSON. What is JSON JavaScript Object Notation Used to format data Commonly used in Web as a vehicle to describe data being sent between.
Department of Computer Science, Florida State University CGS 3066: Web Programming and Design Spring
Web Technology (NCS-504) Prepared By Mr. Abhishek Kesharwani Assistant Professor,UCER Naini,Allahabad.
Dr. Abdullah Almutairi Spring PHP is a server scripting language, and a powerful tool for making dynamic and interactive Web pages. PHP is a widely-used,
VCE IT Theory Slideshows by Mark Kelly study design By Mark Kelly, vceit.com, Begin.
Jackson, Web Technologies: A Computer Science Perspective, © 2007 Prentice-Hall, Inc. All rights reserved Chapter 7 Representing Web Data:
JSON. JSON as an XML Alternative JSON is a light-weight alternative to XML for data- interchange JSON = JavaScript Object Notation It’s really language.
JavaScript and Ajax (JavaScript Environment) Week 6 Web site:
PART 1 XML Basics. Slide 2 Why XML Here? You need to understand the basics of XML to do much with Android All of they layout and configuration files are.
JSON (Copied from and from Prof Da Silva) Week 12 Web site:
JavaScript and Ajax Week 10 Web site:
JSON JavaScript Object Notation Douglas Crockford Yahoo! Inc.
XML Notes taken from w3schools. What is XML? XML stands for EXtensible Markup Language. XML was designed to store and transport data. XML was designed.
Web Services Essentials. What is a web service? web service: software functionality that can be invoked through the internet using common protocols like.
XML & JSON. Background XML and JSON are to standard, textual data formats for representing arbitrary data – XML stands for “eXtensible Markup Language”
JQuery, JSON, AJAX. AJAX: Async JavaScript & XML In traditional Web coding, to get information from a database or a file on the server –make an HTML form.
National College of Science & Information Technology.
Unit 4 Representing Web Data: XML
AJAX and REST.
JSON Crash Course Traversy Media.
Scope, Objects, Strings, Numbers
AJAX.
XML in Web Technologies
JSON Object and JSON Schema
Chapter 7 Representing Web Data: XML
JavaScript an introduction.
JSON The Data Transfer Format of the Stars
Built in Fairfield County: Front End Developers Meetup
WEB PROGRAMMING JavaScript.
JSON.
PHP.
XML Problems and Solutions
What is XML?.
Douglas Crockford Yahoo! Inc.
Department of Computer Science Cal State East Bay, Hayward, CA
JavaScript CS 4640 Programming Languages for Web Applications
JavaScript CS 4640 Programming Languages for Web Applications
Presentation transcript:

JSON The x in Ajax Douglas Crockford Yahoo! Inc.

YAHOO IS HIRING DEVELOPERS Ajax, PHP, DHTML/XHTML, Javascript, CSS, Actionscript / Flash Josie Aguada

Data Interchange The key idea in Ajax. An alternative to page replacement. Applications delivered as pages. How should the data be delivered?

History of Data Formats Ad Hoc Database Model Document Model Programming Language Model

JSON JavaScript Object Notation Minimal Textual Subset of JavaScript

JSON A Subset of ECMA-262 Third Edition. Language Independent. Text-based. Light-weight. Easy to parse.

JSON Is Not... JSON is not a document format. JSON is not a markup language. JSON is not a general serialization format. No cyclical/recurring structures. No invisible structures. No functions.

History 1999 ECMAScript Third Edition 2001 State Software, Inc JSON.org 2005 Ajax 2006 RFC 4627

Languages Chinese English French German Italian Japanese Korean

Languages ActionScript C / C++ C# Cold Fusion Delphi E Erlang Java Lisp Perl Objective-C Objective CAML PHP Python Rebol Ruby Scheme Squeak

Object Quasi-Literals JavaScript Python NewtonScript

Values Strings Numbers Booleans Objects Arrays null

Value

Strings Sequence of 0 or more Unicode characters No separate character type A character is represented as a string with a length of 1 Wrapped in " double quotes " Backslash escapement

String

Numbers Integer Real Scientific No octal or hex No NaN or Infinity Use null instead

Number

Booleans true false

null A value that isn't anything

Object Objects are unordered containers of key/value pairs Objects are wrapped in { }, separates key/value pairs : separates keys and values Keys are strings Values are JSON values struct, record, hashtable, object

Object

{"name":"Jack B. Nimble","at large": true,"grade":"A","level":3, "format":{"type":"rect","width":1920, "height":1080,"interlace":false, "framerate":24}}

Object { "name": "Jack B. Nimble", "at large": true, "grade": "A", "format": { "type": "rect", "width": 1920, "height": 1080, "interlace": false, "framerate": 24 }

Array Arrays are ordered sequences of values Arrays are wrapped in [], separates values JSON does not talk about indexing. An implementation can start array indexing at 0 or 1.

Array

["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] [ [0, -1, 0], [1, 0, 0], [0, 0, 1] ]

Arrays vs Objects Use objects when the key names are arbitrary strings. Use arrays when the key names are sequential integers. Don't get confused by the term Associative Array.

MIME Media Type application/json

Character Encoding Strictly UNICODE. Default: UTF-8. UTF-16 and UTF-32 are allowed.

Versionless JSON has no version number. No revisions to the JSON grammar are anticipated. JSON is very stable.

Rules A JSON decoder must accept all well-formed JSON text. A JSON decoder may also accept non-JSON text. A JSON encoder must only produce well-formed JSON text. Be conservative in what you do, be liberal in what you accept from others.

Supersets YAML is a superset of JSON. A YAML decoder is a JSON decoder. JavaScript is a superset of JSON. A JavaScript compiler is a JSON decoder. New programming languages based on JSON.

JSON is the X in Ajax

JSON in Ajax HTML Delivery. JSON data is built into the page.... var data = {... JSONdata... };...

JSON in Ajax XMLHttpRequest Obtain responseText Parse the responseText responseData = eval( '(' + responseText + ')'); responseData = responseText.parseJSON();

JSON in Ajax Is it safe to use eval with XMLHttpRequest? The JSON data comes from the same server that vended the page. eval of the data is no less secure than the original html. If in doubt, use string.parseJSON instead of eval.

JSON in Ajax Secret Request data using form.submit to the target. The server sends the JSON text embedded in a script in a document. document.domain = 'penzance.com'; parent.deliver({... JSONtext... }); The function deliver is passed the value.

JSON in Ajax Dynamic script tag hack. Create a script node. The src url makes the request. The server sends the JSON text embedded in a script. deliver({... JSONtext... }); The function deliver is passed the value. The dynamic script tag hack is insecure.

JSONRequest A new facility. Two way data interchange between any page and any server. Exempt from the Same Origin Policy. Campaign to make a standard feature of all browsers.

JSONRequest function done ( requestNr, value, exception ) {... } var request = JSONRequest.post( url, data, done ); var request = JSONRequest.get( url, done ); No messing with headers. No cookies. No implied authentication.

JSONRequest Requests are transmitted in order. Requests can have timeouts. Requests can be cancelled. Connections are in addition to the browser's ordinary two connections per host. Support for asynchronous, full duplex connections.

JSONRequest Tell your favorite browser maker I want JSONRequest!

ECMAScript Fourth Ed. New Methods: Object.prototype.toJSONString String.prototype.parseJSON Available now: JSON.org/json.js

supplant var template = ' ' + ' Last {last} ' + ' First {first} ' + ' '; var data = { "first": "Carl", "last": "Hollywood", "border": 2 }; mydiv.innerHTML = template.supplant(data);

supplant String.prototype.supplant = function (o) { return this.replace(/{([^{}]*)}/g, function (a, b) { var r = o[b]; return typeof r === 'string' ? r : a; } ); };

JSONT var rules = { self: ' ', closed: function (x) {return x ? 'polygon' : 'polyline';}, 'points[*][*]': '{$} ' }; var data = { "color": "blue", "closed": true, "points": [[10,10], [20,10], [20,20], [10,20]] }; jsonT(data, rules) <polygon stroke="blue" points=" " />

function jsonT(self, rules) { var T = { output: false, init: function () { for (var rule in rules) if (rule.substr(0,4) != "self") rules["self." + rule] = rules[rule]; return this; }, apply: function(expr) { var trf = function (s) { return function ($0, $1){ return T.processArg($1, expr); }) }, x = expr.replace(/\[[0-9]+\]/g, "[*]"), res; if (x in rules) { if (typeof(rules[x]) == "string") res = trf(rules[x]); else if (typeof(rules[x]) == "function") res = trf(rules[x](eval(expr)).toString()); } else res = T.eval(expr); return res; }, processArg: function (arg, parentExpr) { var expand = function (a, e) { return (e = a.replace(/^\$/,e)).substr(0, 4) != "self" ? ("self." + e) : e; }, res = ""; T.output = true; if (arg.charAt(0) == res = function($0, $1, $2){ return "rules['self." + $1 + "'](" + expand($2,parentExpr) + ")"; })); else if (arg != "$") res = T.apply(expand(arg, parentExpr)); else res = T.eval(parentExpr); T.output = false; return res; }, eval: function (expr) { var v = eval(expr), res = ""; if (typeof(v) != "undefined") { if (v instanceof Array) { for (var i = 0; i < v.length; i++) if (typeof(v[i]) != "undefined") res += T.apply(expr + "[" + i + "]"); } else if (typeof(v) == "object") { for (var m in v) if (typeof(v[m]) != "undefined") res += T.apply(expr+"."+m); } else if (T.output) res += v; } return res; } }; return T.init().apply("self"); }

Some features that make it well-suited for data transfer It's simultaneously human- and machine- readable format; It has support for Unicode, allowing almost any information in any human language to be communicated; The self-documenting format that describes structure and field names as well as specific values; The strict syntax and parsing requirements that allow the necessary parsing algorithms to remain simple, efficient, and consistent; The ability to represent the most general computer science data structures: records, lists and trees.

JSON Looks Like Data JSON's simple values are the same as used in programming languages. No restructuring is required: JSON's structures look like conventional programming language structures. JSON's object is record, struct, object, dictionary, hash, associate array... JSON's array is array, vector, sequence, list...

Arguments against JSON JSON Doesn't Have Namespaces. JSON Has No Validator. JSON Is Not Extensible. JSON Is Not XML.

JSON Doesn't Have Namespaces Every object is a namespace. Its set of keys is independent of all other objects, even exclusive of nesting. JSON uses context to avoid ambiguity, just as programming languages do.

Namespace In this example, there are three occurrences of the name title within the markup, and the name alone clearly provides insufficient information to allow correct processing by a software module. Book-Signing Event <book title="The Island of the Color-Blind" price="$12.95" />

Namespace {"section": "title": "Book-Signing Event", "signing": [ { "author": { "title": "Mr", "name": "Vikram Seth" }, "book": { "title": "A Suitable Boy", "price": "$22.95" } }, { "author": { "title": "Dr", "name": "Oliver Sacks" }, "book": { "title": "The Island of the Color-Blind", "price": "$12.95" } } ] }} section.title section.signing[0].author.title section.signing[1].book.title

JSON Has No Validator Being well-formed and valid is not the same as being correct and relevant. Ultimately, every application is responsible for validating its inputs. This cannot be delegated. A YAML validator can be used.

JSON is Not Extensible It does not need to be. It can represent any non-recurrent data structure as is. JSON is flexible. New fields can be added to existing structures without obsoleting existing programs.

JSON Is Not XML objects arrays strings numbers booleans null element attribute attribute string content entities declarations schema stylesheets comments version namespace

Data Interchange JSON is a simple, common representation of data. Communication between servers and browser clients. Communication between peers. Language independent data interchange.

Why the Name? XML is not a good data interchange format, but it is a document standard. Having a standard to refer to eliminates a lot of squabbling.

Going Meta By adding one level of meta- encoding, JSON can be made to do the things that JSON can't do. Recurrent and recursive structures. Values beyond the ordinary base values.

Going Meta Simply replace the troublesome structures and values with an object which describes them. { "$META$": meta-type, "value": meta-value }

Going Meta Possible meta-types: "label" Label a structure for reuse. "ref" Reuse a structure. "class" Associate a class with a structure. "type" Associate a special type, such as Date, with a structure.

Browser Innovation During the Browser War, innovation was driven by the browser makers. In the Ajax Age, innovation is being driven by application developers. The browser makers are falling behind.

The Mashup Security Problem Mashups are an interesting new way to build applications. Mashups do not work when any of the modules or widgets contains information that is private or represents a connection which is private.

The Mashup Security Problem JavaScript and the DOM provide completely inadequate levels of security. Mashups require a security model that provides cooperation under mutual suspicion.

The Mashup Security Solution A module is like a restricted iframe. The parent script is not allowed access to the module's window object. The module's script is not allowed access to the parent's window object.

The Mashup Security Solution The module node presents a send method which allows for sending a JSON string to the module script. The module node can accept a receive method which allows for receiving a JSON string from the module script.

The Mashup Security Solution Inside the module, there is a global send function which allows for sending a JSON string to the outer document's script. Inside the module, you can define a receive method which allows for receiving a JSON string from the outer document's script.

The Mashup Security Solution

The Mashup Security Solution Communiciation is permitted only through cooperating send and receive functions. The module is exempt from the Same Origin Policy.

The Mashup Security Solution Ask your favorite browser maker for the tag.