Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer and JSON Patch Updates to Java API for JSON Processing Kin-man Chung.

Similar presentations


Presentation on theme: "Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer and JSON Patch Updates to Java API for JSON Processing Kin-man Chung."— Presentation transcript:

1

2 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer and JSON Patch Updates to Java API for JSON Processing Kin-man Chung Oracle Corporation September 30, 2014

3 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Safe Harbor Statement 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. 3

4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 4 6

5 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 5 6

6 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Object Model Overview An immutable representation of a JSON value Represented by: – JsonObject – JsonArray – JsonNumber – JsonString – Literals TRUE, FALSE, and NULL 6 JsonValue

7 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Object Model Overview Represents a JSON object java.util.Map Created with – JsonObjectBuilder – JsonObjectReader 7 JsonObject

8 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Object Model Overview Represents a JSON array java.util.List Created with – JsonArrayBuilder – JsonArrayReader 8 JsonArray

9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Object Model Overview Factory class for creating JSON objects Plugin factories with service provider API includes – createObjectBuilder() – createArrayBuilder() 9 Json

10 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |10 [ { "name": "Duke", "gender": "M", "phone": { "areacode": "650", "number": "234-5678"} }, { "name": "Jane", ”gender": "F", "phone": { "areacode": "777", "number": "999-5555"} }, { "name": "Amy", "gender": "F", "phone": { "areacode": "505" "number": "333-4444"} } ] Example: contacts in JSON

11 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |11 JsonArray contacts = Json.createArrayBuilder().add(Json.createObjectBuilder().add("name", "Duke").add("gender", "M").add("phone", Json.createObjectBuilder().add("areacode", "650").add("number", "234-5678"))).add(Json.createObjectBuilder().add("name", "Jane").add("gender", "F").add("phone", Json.createObjectBuilder().add("areacode", ”777").add("number": "999-5555"))).add(Json.createObjectBuilder().add("name", “Amy").add("gender", "F").add("phone", Json.createObjectBuilder().add("areacode", "505").add("number", "333-4444"))).build(); Example: contacts in JSON object model

12 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 12 6

13 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer Specified in RFC 6901 A string syntax for referencing a JSON value Example – /0/phone/number refers to the phone number of first person in the contacts 13

14 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer 14 Proposed API JsonArray contacts = Json.createArrayBuilder().add(…).build(); // Create a JsonPointer JsonPointer p = Json.createPointer("/0/phone/number"); // Get the value at the referenced location in the target JsonValue v = p.getValue(contacts); // Replace a value at the referenced location, returning a new array // with the change JsonArray result = p.replace(contacts, "123-4567");

15 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer getValue – Get the value at the referenced location add – Add/insert a value at the referenced location replace – Replace a value at the referenced location remove – Remove a value at the referenced location 15 Methods in JsonPointer

16 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer An operation is applied to a JsonArray or JsonObject Operations do not modify the target JsonArray or JsonObject Operation add, replace, or remove returns a new JsonArray or JsonObject containing the result – Transforms the target into the result 16 Operations in JsonPointer

17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 17 6

18 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Patch Specified in RFC 6902 Sequence of operations for modifying a JSON document – Operations specified in a JSON array Suitable for use in http PATCH method 18

19 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Patch [ {"op":"replace", "path":"/1/phone", "value": { "areacode": "111", "number": "222-3333"} } {"from":"/1/phone", "path": "/2", "op":"copy"} ] 19 Example

20 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Patch An patch operation is a JSON object Must have an “op” field with a value of – “add”, “replace”, “remove”, “move”, “copy”, or “test” Must have a “path” field – A JSON Pointer specifying the target location Other fields depending on “op” 20 Operations

21 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Patch // Create the target and the patch JsonArray target = Json.createArrayBuilder().add(…).build(); JsonArray patch = Json.createArrayBuilder()….build(); // Create JsonPatch from patch JsonPatch jsonpatch = Json.createPatch(patch); // Apply the patch to the target and return the result JsonArray result = jsonpatch.apply(target); 21 Proposed API

22 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 22 6

23 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Editing/Transformation A JSON Patch transforms a JSON target to a JSON result Propose adding capability to edit a JsonArray or JsonObject Use builder pattern: – Create builders with initial JsonArray or JsonObject – Add to ObjectBuilder remove(name) – Add to ArrayBuilder add(index, value), set(index, value), remove(index) – Builder returns immutable JsonArray or JsonObject when done 23

24 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Editing // Create the target JsonArray target = Json.createArrayBuilder().add(…).build(); // Create a builder initialized with the target JsonArrayBuilder builder = Json.createArrayBuilder(target); // Creates a new object and insert it into the array JsonObject John = Json.createObjectBuilder()….build(); JsonArray result = builder.add(1, John).build(); 24 Proposed API

25 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 25 6

26 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 A JsonObject is a Map, and a JsonArray is a List, so queries can be implemented with Java’s stream operations, using Lambda expressions Example: Output names of contacts whose gender is F 26 JsonArray contacts; contacts.getValuesAs(JsonObject.class).stream().filter(x->"F".equals(x.getString("gender"))).map(x->x.getString("name")).forEach(System.out::println);

27 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Example: Collect query results in a List 27 JsonArray contacts; List names = contacts.getValuesAs(JsonObject.class).stream().filter(x->"F".equals(x.getString("gender"))).map(x->x.getString(“name”)).collect(Collectors.toList());

28 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Java Collectors return Lists or Maps. We need collectors that returns JsonArrays or JsonObjects 28 Problem

29 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 New helper class JsonCollectors that construct Collectors for JSON objects or arrays toJsonArray: – Accumulates values in a JsonArray toJsonObject: – Accumulates values in a JsonObject groupBy – Implements “group by” operations on the values 29 Proposed API

30 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Collect the query result in a JsonArray 30 Example JsonArray contacts; JsonArray names = contacts.getValuesAs(JsonObject.class).stream().filter(x->"F".equals(x.getString("gender"))).map(x->x.getString("name")).collect(JsonCollectors.toJsonArray());

31 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Collect the query result in a JsonObject 31 Example JsonArray contacts; JsonObject nameToPhones = contacts.getValuesAs(JsonObject.class).stream().filter(x->"F".equals(x.getString("gender"))).collect(JsonCollectors.toJsonObject( x->x.getString("name"), x->x.getJsonObject("phone"));

32 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Group the contacts by gender 32 Example JsonArray contacts; JsonObject groups = contacts.getValuesAs(JsonObject.class).stream().collect(JsonCollectors.groupBy(x->getString("gender")));

33 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Query with Java SE 8 Change the phone areacodes from “415” to “650” 33 Example: Putting it all together Static int index = -1; JsonArray patch = contacts.getValuesAs(JsonObject.class).stream().peek(x->index++).filter(x->x.getObject("phone").getString("areacode").equals("415")).map(Json.createObjectBuilder().add("op", "replace").add("path", "/"+index+"/phone/areacode").add("value", “650”).build()).collect(JsonCollectors.toJsonArray()); JsonArray result = Json.createPatch(patch).apply(contacts);

34 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda JSON Object Model Overview JSON Pointer JSON Patch JSON Editing/Transformation JSON Query with Java SE 8 Big JSON data 1 2 3 4 5 34 6

35 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Support for big JSON data Big JSON data – Cannot fit in memory – Generated dynamically – Potentially infinite We already have a stream model, suitable for processing big data – Add API to make it more useful 35

36 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Support for big JSON data Allow creation of partial JSON data in JsonParser – Add getJsonObject() at the beginning of an object – Add getJsonArray() at the beginning of an array Allow skipping values in JsonParser API for getting java.util.stream in JsonParser – Lazy evaluation, pull model – Low level: Stream of parse events – High level: Stream of JsonObject and JsonArray elements Performance matters 36

37 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Summary Support for JSON Pointer and JSON Patch Add editing/transformation to JsonObject and JsonArray Add help class/method for JSON query Add support for big JSON data WARNING: The API changes are just proposals, are not final 37

38 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Q & A 38

39 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |39

40

41


Download ppt "Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON Pointer and JSON Patch Updates to Java API for JSON Processing Kin-man Chung."

Similar presentations


Ads by Google