22
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 1

JSON-P

Embed Size (px)

DESCRIPTION

This fast-faced, code-centric lightning talk covers the new JSON-P (aka Java API for JSON Processing) API. JSON is quickly becoming the de facto data interchange format on the web, especially with powerful JavaScript clients, Ajax, REST and HTML 5 WebSockets. JSON-P is intended to provide a standard, vendor-neutral, ubiquitous solution for parsing, generating and querying JSON. It includes both a DOM-like Object Model API and a StAX-like Streaming API.

Citation preview

Page 1: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.1

Page 2: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.2

Java API for JSON ProcessingReza RahmanGlassFish/Java EE [email protected]

Page 3: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.3

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 4: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.4

Java API for JSON Processing

Standard API to parse, generate, transform, query JSON Object Model and Streaming API -- similar to DOM and StAX Binding JSON to Java objects forthcoming

Page 5: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.5

Streaming API

JsonParser – Parses JSON in a streaming way from input sources– Similar to StAX’s XMLStreamReader, a pull parser

Created using :– Json.createParser(…), Json.createParserFactory().createParser(…)

– Optionally, configured with features

Parser state events : – START_ARRAY, START_OBJECT, KEY_NAME, VALUE_STRING,

VALUE_NUMBER, VALUE_TRUE, VALUE_FALSE, VALUE_NULL, END_OBJECT, END_ARRAY

JsonParser

Page 6: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.6

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

Page 7: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.7

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

START_OBJECT

Page 8: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.8

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

KEY_NAME

Page 9: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.9

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

VALUE_STRING

Page 10: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.10

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

VALUE_NUMBER

Page 11: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.11

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

START_ARRAY

Page 12: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.12

Streaming APIJsonParser

{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

END_ARRAY

Page 13: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.13

Streaming APIJsonParser{

"firstName": "John", "lastName": "Smith", "age": 25,

"phoneNumber": [

{ "type": "home", "number": "212 555-1234" },

{ "type": "fax", "number": "646 555-4567" }

]

}

Event event = parser.next(); // START_OBJECT

event = parser.next(); // KEY_NAME

event = parser.next(); // VALUE_STRING

String name = parser.getString(); // "John”

Page 14: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.14

Streaming API

JsonGenerator – Generates JSON in a streaming way to output sources

– Similar to StAX’s XMLStreamWriter

Created using :– Json.createGenerator(…),

Json.createGeneratorFactory().createGenerator(…)

Optionally, configured with features – e.g. pretty printing

Allows method chaining

JsonGenerator

Page 15: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.15

Streaming APIJsonGenerator

JsonGenerator ge=Json.createGenerator(…);

ge.writeStartArray()

.writeStartObject()

.write("type", "home”)

.write("number", "212 555-1234")

.writeEnd()

.writeStartObject()

.write("type", "fax”)

.write("number", "646 555-4567")

.writeEnd()

.writeEnd()

.close();

[

{

"type": "home”,

"number": "212 555-1234"

},

{

"type": "fax”,

"number": "646 555-4567"

}

]

Page 16: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.16

Object Model API

Builder to build JsonObject and JsonArray from scratch Allows method chaining Type-safe (cannot mix array and object building methods) Can also use existing JsonObject and JsonArray in a builder

JsonBuilder

// builds empty JSON object

JsonObject obj = Json.createObjectBuilder().build();

Page 17: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.17

Object Model APIJsonBuilder

JsonArray value =

Json.createArrayBuilder()

.add(Json.createObjectBuilder()

.add("type", "home")

.add("number", "212 555-1234")

)

.add(Json.createObjectBuilder()

.add("type", "fax")

.add("number", "646 555-4567")

)

.build();

[

{

"type": "home”,

"number": "212 555-1234"

},

{

"type": "fax”,

"number": "646 555-4567"

}

]

Page 18: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.18

Object Model API

Reads JsonObject and JsonArray from input source– I/O Reader, InputStream (+ encoding)

Optionally, configured with features Uses pluggable JsonParser

JsonReader

// Reads a JSON object

try(JsonReader reader = Json.createReader(io)) {

JsonObject obj = reader.readObject();

}

Page 19: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.19

Object Model API

Writes JsonObject and JsonArray to output source– I/O Writer, OutputStream (+ encoding)

Optionally, configured with features. For e.g. pretty printing Uses pluggable JsonGenerator

JsonWriter

// Writes a JSON object

try(JsonWriter writer = Json.createWriter(io)) {

writer.writeObject(obj);

}

Page 20: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.20

Where to Find Out More Read the draft spec and API docs at

http://json-processing-spec.java.net Join [email protected] and send questions and

comments GlassFish 4.0

– http://glassfish.java.net/

– http://dlc.sun.com.edgesuite.net/glassfish/4.0/promoted/

JSON-P– http://jsonp.java.net

Slide Deck– http://www.slideshare.net/reza_rahman

Page 21: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.21

Graphic Section Divider

Page 22: JSON-P

Copyright © 2012, Oracle and/or its affiliates. All rights reserved.22