{"id":1147,"date":"2021-04-22T14:23:27","date_gmt":"2021-04-22T13:23:27","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=1147"},"modified":"2021-04-26T14:13:37","modified_gmt":"2021-04-26T13:13:37","slug":"autonomous-json-database-with-java-records-and-json-libs","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/autonomous-json-database-with-java-records-and-json-libs\/","title":{"rendered":"Autonomous JSON Database with Java Records and JSON libs"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd.jpg\" alt=\"\" width=\"797\" height=\"317\" class=\"alignnone size-full wp-image-1148\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd.jpg 797w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd-300x119.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/ajd-768x305.jpg 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/p>\n<p><b>How heya?<\/b><\/p>\n<p>Since I saw the <a href=\"https:\/\/blogs.oracle.com\/jsondb\/autonomous-json-database\" rel=\"noopener\" target=\"_blank\">launching of the Autonomous JSON Database<\/a> (AJD)  I was wondering if it is possible to use Java Records and how it would be the Serializing and Deserializing JSON part.<\/p>\n<p><a href=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/create_ajdgif.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/create_ajdgif.gif\" alt=\"\" width=\"550\" height=\"309\" class=\"alignnone size-full wp-image-1149\" \/><\/a><br \/>\n<small>Picture1: Simplified animation showing basic steps to create an AJD instance<\/small><\/p>\n<p>Recently Oracle <a href=\"https:\/\/blogs.oracle.com\/developers\/oracle-cloud-adds-free-apex-and-json-services\" target=\"_blank\" rel=\"noopener\">announced the Free AJD<\/a> and I decided to put my test in a blog. You can check the AJD details <a href=\"https:\/\/www.oracle.com\/autonomous-database\/autonomous-json-database\/\" rel=\"noopener\" target=\"_blank\">here<\/a>.<\/p>\n<p>Everything started here, when I saw <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/simple-oracle-document-access\/java\/adsda\/using-soda-java.html#GUID-EF1551B4-A06A-42CB-B472-D692AF1D9CDC\" rel=\"noopener\" target=\"_blank\">this documentation<\/a> to get started and I saw that to create a new document you should send a string.<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"co1\">\/\/ Create a JSON document.<\/span><br \/>\nOracleDocument doc <span class=\"sy0\">=<\/span> db.<span class=\"me1\">createDocumentFromString<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;{ &quot;<\/span>name<span class=\"st0\">&quot; : &quot;<\/span>Alexander<span class=\"st0\">&quot; }&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Then I was thinking what is the best way to Serialize and Deserialize an Object to JSON and if it is possible to use Java Records?<\/p>\n<p>JDK 14 introduces records, which are a new kind of type declaration. Like an enum, a record is a restricted form of a class. It\u2019s ideal for &#8220;plain data carriers,&#8221; classes that contain data not meant to be altered, and only the most fundamental methods such as constructors and accessors. The important difference between class and record is that a record aims to eliminate all the boilerplate code needed to set and get the data from an instance. Records transfer this responsibility to the Java compiler which generates the constructor, field getters, hashCode() and equals() as well toString() methods.<\/p>\n<p>Yes, it is possible to use Records, but the most important thing here is how to Serialize and Deserialize an Object to JSON?<br \/>\nAnd for that, we need to check what are the JSON libs options?<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json.jpg\" alt=\"\" width=\"935\" height=\"418\" class=\"alignnone size-full wp-image-1153\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json.jpg 935w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json-300x135.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/json-768x343.jpg 768w\" sizes=\"auto, (max-width: 935px) 100vw, 935px\" \/><br \/>\n<small>Picture2: most popular JSON libs<\/small><\/p>\n<p>In actuality, plenty of libraries already exist that can format objects into JSON. So I decided to create a test and compare the most popular JSON libs; JSON-B, Jackson, and Gson.<\/p>\n<p><a href=\"https:\/\/jakarta.ee\/specifications\/jsonb\/\" rel=\"noopener\" target=\"_blank\">JSON-B<\/a> is a Jakarta EE specification that provides an API for transforming JSON to Java objects (and back again).<\/p>\n<p><a href=\"https:\/\/github.com\/FasterXML\/jackson\" rel=\"noopener\" target=\"_blank\">FasterXML Jackson<\/a> is not an implementation of the JSON-B specification but provides similar mapping functionality between JSON and Java objects. The detailed mapping behavior of Jackson and JSON-B implementations differs.<\/p>\n<p><a href=\"https:\/\/github.com\/google\/gson\" rel=\"noopener\" target=\"_blank\">Gson<\/a> is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have a source code of.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/micropofile-1024x380.jpg\" alt=\"\" width=\"640\" height=\"238\" class=\"alignnone size-large wp-image-1154\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/micropofile-1024x380.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/micropofile-300x111.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/micropofile-768x285.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/micropofile.jpg 1150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><br \/>\n<small>Picture3: Jakarta EE VS Microprofile<\/small><\/p>\n<p>I did search for the Microprofile JSON specification and I didn&#8217;t find anything specific, and it looks like they follow the JSOB-B idea. (If you know something here, please leave a comment)<\/p>\n<p>Before the release of JSON-B (which arrived as part of Java EE 8), JSON-P was Java EE\u2019s standardized way to interact with JSON. <a href=\"https:\/\/openliberty.io\/docs\/21.0.0.3\/json-p-b.html\" rel=\"noopener\" target=\"_blank\">JSON-P<\/a> is a lower-level API that provides two models (streaming and object) for JSON processing and transformation.<\/p>\n<p><a href=\"https:\/\/eclipse-ee4j.github.io\/yasson\/\" rel=\"noopener\" target=\"_blank\">Eclipse Yasson<\/a> is the reference implementation<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>org.<span class=\"me1\">eclipse<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>yasson<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>version<span class=\"sy0\">&gt;<\/span>1.0.6<span class=\"sy0\">&lt;\/<\/span>version<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>scope<span class=\"sy0\">&gt;<\/span>test<span class=\"sy0\">&lt;\/<\/span>scope<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I just add the maven dependency and I had to add the <strong><em>@JsonbCreator<\/em><\/strong> annotation on the Location constructor<\/p>\n<p>There are other implementations as well;<\/p>\n<ul>\n<li><a href=\"https:\/\/www.wildfly.org\/\" rel=\"noopener\" target=\"_blank\">Wildfly<\/a> (23.0.0.Final)<\/li>\n<li><a href=\"https:\/\/www.payara.fish\/\" rel=\"noopener\" target=\"_blank\">Payara<\/a> (5.2021.1)<\/li>\n<li><a href=\"https:\/\/openliberty.io\/\" rel=\"noopener\" target=\"_blank\">OpenLiberty<\/a> (21.0.0.3)<\/li>\n<li><a href=\"https:\/\/quarkus.io\/\" rel=\"noopener\" target=\"_blank\">Quarkus<\/a> (1.13.2.Final)<\/li>\n<li><a href=\"https:\/\/helidon.io\/#\/\" rel=\"noopener\" target=\"_blank\">Helidon<\/a> (2.2.2)<\/li>\n<\/ul>\n<p><b>For Jackson<\/b><\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>com.<span class=\"me1\">fasterxml<\/span>.<span class=\"me1\">jackson<\/span>.<span class=\"me1\">core<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>jackson<span class=\"sy0\">-<\/span>databind<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>version<span class=\"sy0\">&gt;<\/span>2.12.0<span class=\"sy0\">&lt;\/<\/span>version<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I just add<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"kw1\">final<\/span> ObjectMapper mapper <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> ObjectMapper<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; .<span class=\"me1\">enable<\/span><span class=\"br0\">&#40;<\/span>SerializationFeature.<span class=\"me1\">INDENT_OUTPUT<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><b>For Gson<\/b><\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/><\/div><\/td><td><div class=\"java codecolorer\">&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>com.<span class=\"me1\">google<\/span>.<span class=\"me1\">code<\/span>.<span class=\"me1\">gson<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>gson<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">&lt;<\/span>version<span class=\"sy0\">&gt;<\/span>2.3.1<span class=\"sy0\">&lt;\/<\/span>version<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I just override the to String method.<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/><\/div><\/td><td><div class=\"java codecolorer\">@Override<br \/>\n<span class=\"kw1\">public<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> toString<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\nGson gson <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Gson<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">return<\/span> gson.<span class=\"me1\">toJson<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>You can check and get the code in my <a href=\"https:\/\/github.com\/igfasouza\/Oracle_AJD_java14\" rel=\"noopener\" target=\"_blank\">GitHub<\/a>.<\/p>\n<p>The main point in the code is that these lines give the same result.<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/><\/div><\/td><td><div class=\"java codecolorer\">OracleDocument doc <span class=\"sy0\">=<\/span> db.<span class=\"me1\">createDocumentFromString<\/span><span class=\"br0\">&#40;<\/span>la.<span class=\"me1\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nOracleDocument doc <span class=\"sy0\">=<\/span> db.<span class=\"me1\">createDocumentFromString<\/span><span class=\"br0\">&#40;<\/span>laAPI.<span class=\"me1\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nOracleDocument doc <span class=\"sy0\">=<\/span> db.<span class=\"me1\">createDocumentFromString<\/span><span class=\"br0\">&#40;<\/span>laJackson.<span class=\"me1\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nOracleDocument doc <span class=\"sy0\">=<\/span> db.<span class=\"me1\">createDocumentFromString<\/span><span class=\"br0\">&#40;<\/span>jsonb.<span class=\"me1\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>I also added a test where I compare the objects and the JSON to validate that they are equal.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json01.jpg\" alt=\"\" width=\"534\" height=\"291\" class=\"alignnone size-full wp-image-1164\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json01.jpg 534w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/duke_json01-300x163.jpg 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><br \/>\n<small>Picture4: Java Duke serialization and deserialization<\/small><\/p>\n<p>I saw that <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-13-2-final-released\/\" rel=\"noopener\" target=\"_blank\">Quarkus<\/a> released the Oracle JDBC driver extension recently, and people started to ask what is special about this extension and if this extension supports SODA or not?<\/p>\n<p>I don\u2019t have implementation details of this extension and I didn\u2019t have time to test, but on Quarkus you can choose between JSON-B or Jackson and as I demonstrated in my test it will work and will generate the same result. (let me know in the comments if you did any tests and if there is a difference?)<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>io.<span class=\"me1\">quarkus<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>quarkus<span class=\"sy0\">-<\/span>resteasy<span class=\"sy0\">-<\/span>jackson<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>dependency<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>groupId<span class=\"sy0\">&gt;<\/span>io.<span class=\"me1\">quarkus<\/span><span class=\"sy0\">&lt;\/<\/span>groupId<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>artifactId<span class=\"sy0\">&gt;<\/span>quarkus<span class=\"sy0\">-<\/span>resteasy<span class=\"sy0\">-<\/span>jsonb<span class=\"sy0\">&lt;\/<\/span>artifactId<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;\/<\/span>dependency<span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>If you getting confused and not knowing which implementation you are using you can find out which implementation is used, it is sufficient to inspect the package name of the following class:<\/p>\n<div class=\"codecolorer-container java blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"java codecolorer\">JsonbBuilder.<span class=\"me1\">create<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getClass<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/3TbbivV2Epk\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/q5ELQJ_3FB0\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>Conclusions<\/h2>\n<p>We can use records to serialize and deserialize JSON.<br \/>\nWe can use any JSON lib API and the result will be the same.<\/p>\n<h2>Links<\/h2>\n<p><a href=\"http:\/\/oracle.github.io\/soda-for-java\/\" rel=\"noopener\" target=\"_blank\">http:\/\/oracle.github.io\/soda-for-java\/<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/cloud\/paas\/autonomous-json-database\/ajdug\/java-application.html#GUID-6B2610C1-120C-46F0-876C-E7D871CEC267\" rel=\"noopener\" target=\"_blank\">https:\/\/docs.oracle.com\/en\/cloud\/paas\/autonomous-json-database\/ajdug\/java-application.html#GUID-6B2610C1-120C-46F0-876C-E7D871CEC267<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/cd\/E56351_01\/doc.30\/e58124\/soda_for_java.htm#ADSDA144\" rel=\"noopener\" target=\"_blank\">https:\/\/docs.oracle.com\/cd\/E56351_01\/doc.30\/e58124\/soda_for_java.htm#ADSDA144<\/a><\/p>\n<p><a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/14\/language\/records.html\" rel=\"noopener\" target=\"_blank\">https:\/\/docs.oracle.com\/en\/java\/javase\/14\/language\/records.html<\/a><\/p>\n<p><a href=\"https:\/\/javaee.github.io\/jsonb-spec\/users-guide.html\" rel=\"noopener\" target=\"_blank\">https:\/\/javaee.github.io\/jsonb-spec\/users-guide.html<\/a><\/p>\n<p><a href=\"https:\/\/javaee.github.io\/jsonp\/\" rel=\"noopener\" target=\"_blank\">https:\/\/javaee.github.io\/jsonp\/<\/a><\/p>\n<p><a href=\"https:\/\/blogs.oracle.com\/datawarehousing\/autonomous-database-newsletter-august-20-2020\" rel=\"noopener\" target=\"_blank\">https:\/\/blogs.oracle.com\/datawarehousing\/autonomous-database-newsletter-august-20-2020<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How heya? Since I saw the launching of the Autonomous JSON Database (AJD) I was wondering if it is possible to use Java Records and how it would be the Serializing and Deserializing JSON part. Picture1: Simplified animation showing basic&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/autonomous-json-database-with-java-records-and-json-libs\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1164,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[26,17,27],"class_list":["post-1147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-autonomous","tag-java","tag-json"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=1147"}],"version-history":[{"count":13,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1147\/revisions"}],"predecessor-version":[{"id":1168,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1147\/revisions\/1168"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/1164"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=1147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=1147"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=1147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}