Java JSON Parser Comparison Allan Huang @ Delta DRC
Agenda  JSON  Java API for RESTful Web Services  Java API for JSON Processing  Java EE Compatible Implementations  JSON Parser  Evaluation Criterion  Parser Candidates  Evaluation Matrix
JSON
JSON  JavaScript Object Notation  A lightweight, text-based, language-independent data exchange format.  Built on two structures…  A collection of name/value pairs, realized as Object: { } or Hash Table.  An ordered list of values, realized as an Array: [ ].  Used in AJAX applications, configurations, NoSQL databases, and RESTful web services
Java API for RESTful Web Services  Defined as JSR 339 in Java EE 7  JAX-RS 2.0 specification  Use HTTP methods to interact with the resource  GET to retrieve a resource  POST to create a resource  PUT to update a resource  DELETE to remove a resource  Communication between the client and the endpoint is Stateless.
Java API for JSON Processing  Defined as JSR 353 in Java EE 7  Streaming API  JSON Pull Parser  Similar to StAX API for XML  Uses an event-based parser that reads JSON data one element at a time.  Object Model API  JSON Push Parser  Similar to DOM API for XML  Creates a object tree that represents the JSON data in memory.
Streaming API  Generates JSON output to a given stream by making a function call with one element at a time.  Provides forward, read- only access to the JSON data.
Streaming API Example Json Parser Json Generator
Object Model API  Generates JSON output by navigating the entire tree at once.  It’s slower than streaming model and requires more memory.
Object Model API Example Json Reader Json Writer
Model API Comparison  If you want to…  read a large amount of JSON.  write JSON to a char/byte stream.  random access JSON in memory.  reuse JSON without need to reparse.
Java EE 7 Compatible Implementations Full Platform distribution Web Profile distribution
Java EE 6 Compatible Implementations (1) Full Platform distribution
Java EE 6 Compatible Implementations (2) Web Profile distributions
Java EE FAQ  Web Profile vs. Full Platform  Java EE introduced the lightweight Web Profile optimized for web applications.  e.g. GlassFish Server Open Source Edition 3.1.x  TomEE  An all-Apache Java EE Web Profile certified stack where Apache Tomcat is top dog.  Current version 1.7 supports Java EE 6  Next version 2.x support Java EE 7  Wildfly – formerly known as JBoss AS
JSON Parser
Evaluation Criterion (1)  Community Activity  Repository, Organization, Downloads, Project References  Performance Ranking  Revision  Previous Release Date, Last Release Date, Last Revision Number, Revision Frequency, Total Open Issues
Evaluation Criterion (2)  API Richness  Object Model API, Streaming API support, Java Annotation, Serialization / De-serialization, Documentation & Example  Dependency  3rd -party Libraries  Minimum JDK Version  License  MIT, BSD, Apache 2.0 ...
License
Parser Candidates JSON Parser  json.org  Jackson  Google GSON  json-lib  javax json  json-simple  json-smart  flexjson  fastjson Performance Report  Top 7 Open-Source JSON-Bin  JSON serialization benchmarks  Revisiting a (JSON) Benchmar  jvm-serializers  json-parsers-benchmark  Json BecnhMark
Parser Matrix  Java JSON Parser Criteria javax json Jackson Google GSON json.org json-lib json-simple json-smart flexjson fastjson Community Activity Repository Oracle Java Net GitHub Google Code GitHub Sourceforge Google Code Google Code Sourceforge GitHub Organization Oracle N/A Google JSON org N/A N/A N/A N/A Alibaba Downloads Unknown Unknown 521,946 Unknown 316,668 228,839 12,213 48,276 8,412 Project References 40 215 forks 8 1268 forks 12 33 7 Unknown 586 forks Performance Ranking Top 7 Open-Source (Small) N/A 3 1 N/A 4 N/A N/A 2 N/A Top 7 Open-Source (Large) N/A 1 3 N/A 2 N/A N/A 4 N/A JSON serialization benchmarks N/A 1 2 N/A N/A N/A N/A N/A N/A Revisiting a (JSON) Benchmark N/A 1 2 N/A N/A N/A N/A N/A N/A jvm-serializers N/A 1 3 6 8 5 4 7 2 json-parsers- benchmark (Boon) N/A 1 2 N/A N/A N/A 3 N/A N/A Json BecnhMark (json-smart) N/A 3 N/A 5 6 4 1 N/A 2 Revision Previous Release Date Unknown 2014/8/15 2013/5/13 Unknown 2009/7/11 2009/2/15 2013/8/13 2013/5/19 2014/5/20 Last Release Date 2013/11/18 2014/10/4 2014/8/11 2014/5/22 2010/12/14 2012/2/18 2013/8/15 2013/7/31 2014/10/11 Last Revision Number 1.0.4 2.4.3 2.3 N/A 2.4 1.1.1 2.0-RC3 3.2 1.1.42 Revision Frequency Sometimes Always Sometimes Often No Longer No Longer Rarely Rarely Often Total Open Issues 6 bugs 7 issues 2 pull reqeusts 84 defects 32 enhancements 3 pull requests 35 bugs 10 defects 16 enhancements 5 defects 2 enhancements 8 bugs 10 issues API Richness Object Model API Support Yes Yes Yes Yes Yes Yes Yes Yes Yes Streaming API Support Yes Yes Yes No No Yes Yes No Yes Java Annotation Yes Yes Yes No No No No Yes Yes Serialization & De- serialization Yes Yes Yes Yes Yes, but hard to use No Yes, but hard to use Yes Yes Documentation & Example Rich Rich Rich Poor Enough Enough Poor Poor Enough Dependency 3rd-party Libraries 0 0 0 0 Apache commons 0 0 0 0 Minimum JDK Version 1.7 1.6 1.6 1.8 1.5 1.2 1.5 1.6 1.5 License License CDDL 1.1 GPL 2.0 Apache 2.0 LGPL 2.1 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0
Conclusion  “Top 7 Open-Source JSON-Binding Providers Available Today” said…  Google GSON  Process small size data  Jackson  Process large size data  Upgrade Java EE 7 application server? Use Open-Source solution? Which parser is best for RAM / IoT?
Reference  Java API for JSON Processing: An Introduction to JSON  Creating JSON Data Using The Java JSON API (JSR 353)  Java JSON Processing API Example Tutorial  Top 7 Open-Source JSON-Binding Providers Available Today  Java EE 7/6 Compatibility  Java EE FAQ  GlassFish Server Open Source Edition 3.1.x  Apache TomEE  Support JSON JSR 353 - Java API for JSON Processing (JSON-P)  軟體的授權觀念與自由軟體授權條款介紹
Q&A

Java JSON Parser Comparison

  • 1.
  • 2.
    Agenda  JSON  JavaAPI for RESTful Web Services  Java API for JSON Processing  Java EE Compatible Implementations  JSON Parser  Evaluation Criterion  Parser Candidates  Evaluation Matrix
  • 3.
  • 4.
    JSON  JavaScript ObjectNotation  A lightweight, text-based, language-independent data exchange format.  Built on two structures…  A collection of name/value pairs, realized as Object: { } or Hash Table.  An ordered list of values, realized as an Array: [ ].  Used in AJAX applications, configurations, NoSQL databases, and RESTful web services
  • 5.
    Java API forRESTful Web Services  Defined as JSR 339 in Java EE 7  JAX-RS 2.0 specification  Use HTTP methods to interact with the resource  GET to retrieve a resource  POST to create a resource  PUT to update a resource  DELETE to remove a resource  Communication between the client and the endpoint is Stateless.
  • 6.
    Java API forJSON Processing  Defined as JSR 353 in Java EE 7  Streaming API  JSON Pull Parser  Similar to StAX API for XML  Uses an event-based parser that reads JSON data one element at a time.  Object Model API  JSON Push Parser  Similar to DOM API for XML  Creates a object tree that represents the JSON data in memory.
  • 7.
    Streaming API  GeneratesJSON output to a given stream by making a function call with one element at a time.  Provides forward, read- only access to the JSON data.
  • 8.
    Streaming API Example JsonParser Json Generator
  • 9.
    Object Model API Generates JSON output by navigating the entire tree at once.  It’s slower than streaming model and requires more memory.
  • 10.
    Object Model APIExample Json Reader Json Writer
  • 11.
    Model API Comparison If you want to…  read a large amount of JSON.  write JSON to a char/byte stream.  random access JSON in memory.  reuse JSON without need to reparse.
  • 12.
    Java EE 7Compatible Implementations Full Platform distribution Web Profile distribution
  • 13.
    Java EE 6Compatible Implementations (1) Full Platform distribution
  • 14.
    Java EE 6Compatible Implementations (2) Web Profile distributions
  • 15.
    Java EE FAQ Web Profile vs. Full Platform  Java EE introduced the lightweight Web Profile optimized for web applications.  e.g. GlassFish Server Open Source Edition 3.1.x  TomEE  An all-Apache Java EE Web Profile certified stack where Apache Tomcat is top dog.  Current version 1.7 supports Java EE 6  Next version 2.x support Java EE 7  Wildfly – formerly known as JBoss AS
  • 16.
  • 17.
    Evaluation Criterion (1) Community Activity  Repository, Organization, Downloads, Project References  Performance Ranking  Revision  Previous Release Date, Last Release Date, Last Revision Number, Revision Frequency, Total Open Issues
  • 18.
    Evaluation Criterion (2) API Richness  Object Model API, Streaming API support, Java Annotation, Serialization / De-serialization, Documentation & Example  Dependency  3rd -party Libraries  Minimum JDK Version  License  MIT, BSD, Apache 2.0 ...
  • 19.
  • 20.
    Parser Candidates JSON Parser json.org  Jackson  Google GSON  json-lib  javax json  json-simple  json-smart  flexjson  fastjson Performance Report  Top 7 Open-Source JSON-Bin  JSON serialization benchmarks  Revisiting a (JSON) Benchmar  jvm-serializers  json-parsers-benchmark  Json BecnhMark
  • 21.
    Parser Matrix  JavaJSON Parser Criteria javax json Jackson Google GSON json.org json-lib json-simple json-smart flexjson fastjson Community Activity Repository Oracle Java Net GitHub Google Code GitHub Sourceforge Google Code Google Code Sourceforge GitHub Organization Oracle N/A Google JSON org N/A N/A N/A N/A Alibaba Downloads Unknown Unknown 521,946 Unknown 316,668 228,839 12,213 48,276 8,412 Project References 40 215 forks 8 1268 forks 12 33 7 Unknown 586 forks Performance Ranking Top 7 Open-Source (Small) N/A 3 1 N/A 4 N/A N/A 2 N/A Top 7 Open-Source (Large) N/A 1 3 N/A 2 N/A N/A 4 N/A JSON serialization benchmarks N/A 1 2 N/A N/A N/A N/A N/A N/A Revisiting a (JSON) Benchmark N/A 1 2 N/A N/A N/A N/A N/A N/A jvm-serializers N/A 1 3 6 8 5 4 7 2 json-parsers- benchmark (Boon) N/A 1 2 N/A N/A N/A 3 N/A N/A Json BecnhMark (json-smart) N/A 3 N/A 5 6 4 1 N/A 2 Revision Previous Release Date Unknown 2014/8/15 2013/5/13 Unknown 2009/7/11 2009/2/15 2013/8/13 2013/5/19 2014/5/20 Last Release Date 2013/11/18 2014/10/4 2014/8/11 2014/5/22 2010/12/14 2012/2/18 2013/8/15 2013/7/31 2014/10/11 Last Revision Number 1.0.4 2.4.3 2.3 N/A 2.4 1.1.1 2.0-RC3 3.2 1.1.42 Revision Frequency Sometimes Always Sometimes Often No Longer No Longer Rarely Rarely Often Total Open Issues 6 bugs 7 issues 2 pull reqeusts 84 defects 32 enhancements 3 pull requests 35 bugs 10 defects 16 enhancements 5 defects 2 enhancements 8 bugs 10 issues API Richness Object Model API Support Yes Yes Yes Yes Yes Yes Yes Yes Yes Streaming API Support Yes Yes Yes No No Yes Yes No Yes Java Annotation Yes Yes Yes No No No No Yes Yes Serialization & De- serialization Yes Yes Yes Yes Yes, but hard to use No Yes, but hard to use Yes Yes Documentation & Example Rich Rich Rich Poor Enough Enough Poor Poor Enough Dependency 3rd-party Libraries 0 0 0 0 Apache commons 0 0 0 0 Minimum JDK Version 1.7 1.6 1.6 1.8 1.5 1.2 1.5 1.6 1.5 License License CDDL 1.1 GPL 2.0 Apache 2.0 LGPL 2.1 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0
  • 22.
    Conclusion  “Top 7Open-Source JSON-Binding Providers Available Today” said…  Google GSON  Process small size data  Jackson  Process large size data  Upgrade Java EE 7 application server? Use Open-Source solution? Which parser is best for RAM / IoT?
  • 23.
    Reference  Java APIfor JSON Processing: An Introduction to JSON  Creating JSON Data Using The Java JSON API (JSR 353)  Java JSON Processing API Example Tutorial  Top 7 Open-Source JSON-Binding Providers Available Today  Java EE 7/6 Compatibility  Java EE FAQ  GlassFish Server Open Source Edition 3.1.x  Apache TomEE  Support JSON JSR 353 - Java API for JSON Processing (JSON-P)  軟體的授權觀念與自由軟體授權條款介紹
  • 24.