CINXE.COM

Deserialization part 2 | Starburst

<!DOCTYPE html><html lang="en" class="__variable_592a8c __variable_3f7db5"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/0f3a385557f1712f-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/47cbc4e2adbc5db9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/623acd25753df814-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" href="/_next/static/media/8f65835aa057b6ed-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" href="/_next/static/media/ab06f05c30d46390-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" href="/_next/static/media/b0047e94e7f0c63f-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" href="/_next/static/media/cb07cb684de218c2-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" href="/_next/static/media/d18c671c86d7369a-s.p.otf" as="font" crossorigin="" type="font/otf"/><link rel="preload" as="image" imageSrcSet="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fdark-planet.314d4985.webp&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve 1x" fetchPriority="high"/><link rel="preload" as="image" href="/_next/static/media/starburst-logo-bw.3bc0959e.svg"/><link rel="preload" as="image" href="/_next/static/media/g2-seeklogo.fbedb5c2.svg"/><link rel="preload" as="image" href="/_next/static/media/instagram.89a5a5fa.svg"/><link rel="preload" as="image" href="/_next/static/media/youtube.29a80630.svg"/><link rel="preload" as="image" href="/_next/static/media/linkedin.3e7e21af.svg"/><link rel="preload" as="image" href="/_next/static/media/facebook.07186c97.svg"/><link rel="preload" as="image" href="/_next/static/media/twitterx.eef7c637.svg"/><link rel="preload" as="image" href="/_next/static/media/starburst_logo.654cb3e5.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/trophy.svg"/><link rel="preload" as="image" imageSrcSet="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Feclipse-top.a338658d.png&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve 1x" fetchPriority="high"/><link rel="stylesheet" href="/_next/static/css/2a2f849d6f345c35.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1b7ebf9df0d571ae.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2eb718e7b5141997.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve"/><script src="/_next/static/chunks/fd9d1056-256d87e6d0195880.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/7023-5dbd7dfa808aa127.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/main-app-b8d8f654a4c3de8b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/9694-0e03a8f218864453.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/3940-66c9f0077154b71a.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/1592-861e30ea675fe617.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/2004-c54969ea7b791b60.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/2551-25d3d36742795948.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/app/(blog)/blog/layout-9a00538124e3a821.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/c15bf2b0-77a7fe2edf0e5bbc.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/4220-7dc82827145f5c67.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/8492-3b90b6c0ed21004c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/9783-b99abd041c65f619.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/5632-c16f65d3b85ec224.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/app/(blog)/blog/page-e0ac88d1c7c3a619.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script src="/_next/static/chunks/app/(blog)/blog/%5B...uri%5D/page-e2f886e2b299a8ca.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><link rel="preload" href="https://dev.visualwebsiteoptimizer.com" as="script"/><link rel="preload" href="https://js.qualified.com/qualified.js" as="script"/><link rel="preload" href="https://www.googletagmanager.com/gtm.js?id=GTM-MRSPFVL" as="script"/><link rel="preload" href="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js" as="script"/><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=UA-52746336-1" as="script"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/intersect.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/city-1.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/shield-check.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suggestion.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suitcase.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/support.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rebels.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/lot-of-cash.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/healthcare.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/shop.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/industry.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/list.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/planet.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/settings-profiles.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/log-in.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/computer.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/center-align.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/calendar.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/group.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-bubble.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/tools.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/cloud.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/database.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/star.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/white-flag.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-window.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/google-docs.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/graduation-cap.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/media-video.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/sparks.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rocket.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rss-feed.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/chat-lines.svg"/><link rel="preload" as="image" href="https://live-starburst.pantheonsite.io/wp-content/uploads/2023/04/Jordan-Zimmerman-150x150.png"/><title>Deserialization part 2 | Starburst</title><meta name="description" content="In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types."/><meta name="facebook-domain-verification" content="8pp85eyur61kj2mywwvmldhbve10sf"/><meta property="og:title" content="Deserialization part 2 | Starburst"/><meta property="og:description" content="In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types."/><meta property="og:image" content="https://live-starburst.pantheonsite.io/wp-content/uploads/2021/01/starburst-og.jpg"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Deserialization part 2 | Starburst"/><meta name="twitter:description" content="In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types."/><meta name="twitter:image" content="https://live-starburst.pantheonsite.io/wp-content/uploads/2021/01/starburst-og.jpg"/><link rel="icon" href="/favicon-l.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/favicon-d.png" media="(prefers-color-scheme: dark)"/><meta name="next-size-adjust"/><script>(self.__next_s=self.__next_s||[]).push([0,{"children":"\n window._vwo_code || (function() {\nvar account_id=652006,\nversion=2.1,\nsettings_tolerance=2000,\nhide_element='body',\nhide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;transition:none !important;',\n/* DO NOT EDIT BELOW THIS LINE */\nf=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={nonce:v&&v.nonce,use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}v&&t.setAttribute('nonce',v.nonce);d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var n=this.getSettings(),i=d.createElement('script'),r=this;t=t||{};if(n){i.textContent=n;d.getElementsByTagName('head')[0].appendChild(i);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200||o.status===304){w._vwo_code.addScript({text:o.responseText})}else{w._vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}w._vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){w._vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var n=this.hide_element(),i=n?n+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=i;else t.appendChild(d.createTextNode(i));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var i=d.createElement('div');i.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;display: block !important;';i.setAttribute('id','_vis_opt_path_hides');i.classList.add('_vis_hide_layer');t.parentNode.insertBefore(i,t.nextSibling)}var o=window._vis_opt_url||d.URL,s='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(o)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:s})}else{this.load(s+'&x=true')}}};w._vwo_code=code;code.init();})();(function(){var i=window;function t(){if(i._vwo_code){var e=t.hidingStyle=document.getElementById('_vis_opt_path_hides')||t.hidingStyle;if(!i._vwo_code.finished()&&!_vwo_code.libExecuted&&(!i.VWO||!VWO.dNR)){if(!document.getElementById('_vis_opt_path_hides')){document.getElementsByTagName('head')[0].appendChild(e)}requestAnimationFrame(t)}}}t()})();\n","id":"vwo-setup"}])</script><script>(self.__next_s=self.__next_s||[]).push(["https://dev.visualwebsiteoptimizer.com",{"id":"vwo-library"}])</script><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" noModule=""></script></head><body class="bg-smokeyBlack" data-theme="light"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><header class="group/checkbox navbar relative z-10 bg-smokeyBlack p-0" data-theme="dark"><div class="relative z-10 mx-auto w-full bg-smokeyBlack px-4 py-5 lg:container md:px-8 xl:px-24 xl:py-10 max-lg:hidden"><a class="me-3 min-w-[151px] shrink-0 rounded-lg py-1 focus-visible:outline focus-visible:outline-white xl:me-8" href="/"><img src="/_next/static/media/starburst_logo.654cb3e5.svg" alt="Starburst logo" height="40" class="shrink-0 object-contain"/></a><nav class="hidden flex-1 justify-between lg:flex"><ul class="lg:text-base flex items-center gap-1 text-sm text-white 2xl:gap-6"><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Why Starburst"><div tabindex="0" role="button" class="text-white transition-colors duration-200 group-hover/mega:text-purple">Why Starburst</div><div class="pointer-events-none fixed left-0 right-0 mt-6 h-screen opacity-0 backdrop-blur-sm transition-opacity !duration-300 group-hover/mega:opacity-100"></div><div class="dropdown-content absolute !top-0 left-0 !mt-[3.5rem] w-full !scale-100 pt-2 !duration-0 xl:!mt-[5rem] xl:pt-6"><div class="shadow opacity-0 transition-opacity !duration-300 group-hover/mega:opacity-100"><div class="container relative mx-auto px-4 md:px-8 xl:px-24"><div class="relative w-full overflow-hidden rounded-box bg-smokeyBlack p-14 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1),inset_0_0_0_1px_rgba(255,255,255,0.1)]"><div class="absolute inset-0 -top-20 z-0 h-14 w-28 flex-none flex-grow-0 bg-purple blur-[1.75rem] transition-all duration-300" style="top:-10rem;left:0"></div><div class="grid grid-cols-3 gap-8"><div class="col-span-1 space-y-4"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Comparison</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/why-starburst/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/trophy.svg" alt="Why Starburst" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Why Starburst</span><span class="text-md block text-gray-600">Learn our benefits</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/starburst-vs-trino/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/intersect.svg" alt="Starburst vs Trino" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst vs Trino</span><span class="text-md block text-gray-600">Compare Starburst</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class="col-span-2 flex flex-col space-y-4"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Customers</p></div><ul class="flex-1 grid lg:grid-cols-2 lg:gap-x-8"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/customers/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/city-1.svg" alt="Customers at Starburst" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Customers at Starburst</span><span class="text-md block text-gray-600">Client solutions</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/about/security/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/shield-check.svg" alt="Security &amp; Trust" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Security &amp; Trust</span><span class="text-md block text-gray-600">Data safety focus</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/resources/?category=case-study"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suggestion.svg" alt="Customer Stories" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Customer Stories</span><span class="text-md block text-gray-600">Success tales</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/professional-services/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suitcase.svg" alt="Professional Services" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Professional Services</span><span class="text-md block text-gray-600">Expert solutions</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/learn/support/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/support.svg" alt="Support" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Support</span><span class="text-md block text-gray-600">Get help 24/7</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/customers/starburst-data-rebels/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rebels.svg" alt="Starburst Data Rebels" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst Data Rebels</span><span class="text-md block text-gray-600">Empowering innovation</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div></div></div></div></div></div></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Products"><div tabindex="0" role="button" class="text-white transition-colors duration-200 group-hover/mega:text-purple">Products</div><div class="pointer-events-none fixed left-0 right-0 mt-6 h-screen opacity-0 backdrop-blur-sm transition-opacity !duration-300 group-hover/mega:opacity-100"></div><div class="dropdown-content absolute !top-0 left-0 !mt-[3.5rem] w-full !scale-100 pt-2 !duration-0 xl:!mt-[5rem] xl:pt-6"><div class="shadow opacity-0 transition-opacity !duration-300 group-hover/mega:opacity-100"><div class="container relative mx-auto px-4 md:px-8 xl:px-24"><div class="relative w-full overflow-hidden rounded-box bg-smokeyBlack p-14 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1),inset_0_0_0_1px_rgba(255,255,255,0.1)]"><div class="absolute inset-0 -top-20 z-0 h-14 w-28 flex-none flex-grow-0 bg-purple blur-[1.75rem] transition-all duration-300" style="top:-10rem;left:0"></div><div class="flex gap-8"><div class="flex-1 space-y-4 card"><div class="text-lg font-medium h-full"><a class="group flex h-full w-full items-center justify-between gap-4 rounded-2xl bg-gray-900 p-2 p-6 py-10 transition-colors duration-100 ease-in-out hover:bg-[#424242]" href="/starburst-galaxy/"><div class="flex w-fit flex-row items-start gap-4"><div class="flex flex-col justify-between lg:min-h-40 xl:min-h-48"><span class="block text-white text-display-sm xl:w-1/2">Starburst Galaxy</span><div class="flex items-end justify-between"><span class="block text-sm text-gray-600 lg:w-3/4 xl:w-2/3">Fully managed lakehouse from data ingestion to data sharing</span><span class="material-symbols-rounded text-[1.25rem] text-gray-600">arrow_right_alt</span></div></div></div></a></div></div><div class="flex-1 space-y-4 card"><div class="text-lg font-medium h-full"><a class="group flex h-full w-full items-center justify-between gap-4 rounded-2xl bg-gray-900 p-2 p-6 py-10 transition-colors duration-100 ease-in-out hover:bg-[#424242]" href="/starburst-enterprise/"><div class="flex w-fit flex-row items-start gap-4"><div class="flex flex-col justify-between lg:min-h-40 xl:min-h-48"><span class="block text-white text-display-sm xl:w-1/2">Starburst Enterprise</span><div class="flex items-end justify-between"><span class="block text-sm text-gray-600 lg:w-3/4 xl:w-2/3">Self-managed lakehouse with 7x more horsepower than OS Trino</span><span class="material-symbols-rounded text-[1.25rem] text-gray-600">arrow_right_alt</span></div></div></div></a></div></div><div class="flex-1 space-y-4 card"><div class="text-lg font-medium h-full"><a class="group flex h-full w-full items-center justify-between gap-4 rounded-2xl bg-gray-900 p-2 p-6 py-10 transition-colors duration-100 ease-in-out hover:bg-[#424242]" href="/dell/"><div class="flex w-fit flex-row items-start gap-4"><div class="flex flex-col justify-between lg:min-h-40 xl:min-h-48"><span class="block text-white text-display-sm xl:w-1/2">Dell Data Lakehouse</span><div class="flex items-end justify-between"><span class="block text-sm text-gray-600 lg:w-3/4 xl:w-2/3">Modern on-premises storage, SQL engine, and compute for on-prem and hybrid lakehouses</span><span class="material-symbols-rounded text-[1.25rem] text-gray-600">arrow_right_alt</span></div></div></div></a></div></div></div></div></div></div></div></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Solutions"><div tabindex="0" role="button" class="text-white transition-colors duration-200 group-hover/mega:text-purple">Solutions</div><div class="pointer-events-none fixed left-0 right-0 mt-6 h-screen opacity-0 backdrop-blur-sm transition-opacity !duration-300 group-hover/mega:opacity-100"></div><div class="dropdown-content absolute !top-0 left-0 !mt-[3.5rem] w-full !scale-100 pt-2 !duration-0 xl:!mt-[5rem] xl:pt-6"><div class="shadow opacity-0 transition-opacity !duration-300 group-hover/mega:opacity-100"><div class="container relative mx-auto px-4 md:px-8 xl:px-24"><div class="relative w-full overflow-hidden rounded-box bg-smokeyBlack p-14 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1),inset_0_0_0_1px_rgba(255,255,255,0.1)]"><div class="absolute inset-0 -top-20 z-0 h-14 w-28 flex-none flex-grow-0 bg-purple blur-[1.75rem] transition-all duration-300" style="top:-10rem;left:0"></div><div class="flex gap-8"><div class="flex flex-col space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Use cases</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/open-data-lakehouse/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Open Data Lakehouse</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/platform/icehouse/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Icehouse Architecture</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/info/distributed-data-mesh-resource-center/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Data Mesh</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/ai/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Artificial Intelligence</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/elt-data-processing/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">ELT Data Processing</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/data-applications/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Data Applications</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/data-migrations/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Data Migrations</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/data-products/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Data Products</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/federal/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Starburst Enterprise for Government</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/data-migrations/hadoop-modernization/"><span class="flex w-fit flex-row items-start gap-4"><span><span class="text-md block text-white">Hadoop Modernization</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class="flex flex-col space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Industry</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/industry/financial-services/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/lot-of-cash.svg" alt="Financial Services" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Financial Services</span><span class="text-md block text-gray-600">Data-driven banking</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/industry/healthcare-and-life-sciences/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/healthcare.svg" alt="Healthcare &amp; Life Sciences" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Healthcare &amp; Life Sciences</span><span class="text-md block text-gray-600">Innovations in care</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/solutions/industry/retail-consumer-packaged-goods/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/shop.svg" alt="Retail &amp; CPG" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Retail &amp; CPG</span><span class="text-md block text-gray-600">Insights for growth</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/platform/starburst-enterprise/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/industry.svg" alt="Manufacturing" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Manufacturing</span><span class="text-md block text-gray-600">Smarter production</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class="flex flex-col space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Partners</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/partner-listing/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/list.svg" alt="Partner Listing" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Partner Listing</span><span class="text-md block text-gray-600">Meet Our Partners</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://accounts.skilljar.com/accounts/login/?t=32rio14maro27&amp;d=2z7ddtjqi09es&amp;next=%2Fauth%2Fendpoint%2Flogin%2Fresult%3Fnext%3D%252F%26d%3D2z7ddtjqi09es"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/planet.svg" alt="Starburst Orbit" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst Orbit</span><span class="text-md block text-gray-600">Learning Portal</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/partners/become-a-partner/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/settings-profiles.svg" alt="Become a Partner" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Become a Partner</span><span class="text-md block text-gray-600">Join our network</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://partners.starburstdata.com/?__hstc=81614408.a0528845c6a3bab6567bb0ba56ca3b08.1688053347051.1689974773529.1689983551853.46&amp;__hssc=81614408.6.1689983551853&amp;__hsfp=3812163218"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/log-in.svg" alt="Partner Login" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Partner Login</span><span class="text-md block text-gray-600">Partner portal access</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/dell/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/computer.svg" alt="Dell" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Dell</span><span class="text-md block text-gray-600">Powered by Starburst</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div></div></div></div></div></div></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Pricing"><a class="text-white transition-colors duration-200 group-hover/mega:text-purple" href="/pricing/">Pricing</a></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Resources"><div tabindex="0" role="button" class="text-white transition-colors duration-200 group-hover/mega:text-purple">Resources</div><div class="pointer-events-none fixed left-0 right-0 mt-6 h-screen opacity-0 backdrop-blur-sm transition-opacity !duration-300 group-hover/mega:opacity-100"></div><div class="dropdown-content absolute !top-0 left-0 !mt-[3.5rem] w-full !scale-100 pt-2 !duration-0 xl:!mt-[5rem] xl:pt-6"><div class="shadow opacity-0 transition-opacity !duration-300 group-hover/mega:opacity-100"><div class="container relative mx-auto px-4 md:px-8 xl:px-24"><div class="relative w-full overflow-hidden rounded-box bg-smokeyBlack p-14 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1),inset_0_0_0_1px_rgba(255,255,255,0.1)]"><div class="absolute inset-0 -top-20 z-0 h-14 w-28 flex-none flex-grow-0 bg-purple blur-[1.75rem] transition-all duration-300" style="top:-10rem;left:0"></div><div class="flex flex-col flex-wrap gap-8 lg:max-h-[30rem]"><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-[calc(33.3%-1.33rem)]"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Events</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/datanova/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/center-align.svg" alt="Datanova" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Datanova</span><span class="text-md block text-gray-600">Shaping the future of data</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/learn/events-webinars/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/calendar.svg" alt="Event Calendar" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Event Calendar</span><span class="text-md block text-gray-600">Upcoming gatherings</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-[calc(33.3%-1.33rem)]"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Connect</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/community/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/group.svg" alt="Community" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Community</span><span class="text-md block text-gray-600">Connect and share</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://www.starburst.io/community/forum/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-bubble.svg" alt="Forum" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Forum</span><span class="text-md block text-gray-600">Discuss and discover</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-[calc(33.3%-1.33rem)]"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Documentation</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://docs.starburst.io/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/tools.svg" alt="Technical Overview" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Technical Overview</span><span class="text-md block text-gray-600">Helpful materials</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://docs.starburst.io/starburst-galaxy/index.html"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/cloud.svg" alt="Starburst Galaxy" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst Galaxy</span><span class="text-md block text-gray-600">User guides</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://docs.starburst.io/latest/index.html"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/database.svg" alt="Starburst Enterprise" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst Enterprise</span><span class="text-md block text-gray-600">User guides</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://docs.starburst.io/clients/index.html"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/star.svg" alt="Clients" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Clients</span><span class="text-md block text-gray-600">Trusted partnerships</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-[calc(33.3%-1.33rem)]"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Blog, Guides &amp; Webinars</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/blog/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/white-flag.svg" alt="Blog" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Blog</span><span class="text-md block text-gray-600">Insights and updates</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/data-glossary/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-window.svg" alt="Data Glossary" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Data Glossary</span><span class="text-md block text-gray-600">Data definitions</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/resources/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/google-docs.svg" alt="Resources" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Resources</span><span class="text-md block text-gray-600">Guides and tools</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-[calc(33.3%-1.33rem)]"><div class="text-lg font-medium"><p class="ps-2 text-sm text-gray-600">Training &amp; Certification</p></div><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="https://academy.starburst.io/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/graduation-cap.svg" alt="Starburst Academy" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Starburst Academy</span><span class="text-md block text-gray-600">Training and courses</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/tutorials/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/media-video.svg" alt="Tutorials" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Tutorials</span><span class="text-md block text-gray-600">Step-by-step guides</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div></div></div></div></div></div></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="About"><div tabindex="0" role="button" class="text-white transition-colors duration-200 group-hover/mega:text-purple">About</div><div class="pointer-events-none fixed left-0 right-0 mt-6 h-screen opacity-0 backdrop-blur-sm transition-opacity !duration-300 group-hover/mega:opacity-100"></div><div class="dropdown-content absolute !top-0 left-0 !mt-[3.5rem] w-full !scale-100 pt-2 !duration-0 xl:!mt-[5rem] xl:pt-6"><div class="shadow opacity-0 transition-opacity !duration-300 group-hover/mega:opacity-100"><div class="container relative mx-auto px-4 md:px-8 xl:px-24"><div class="relative w-full overflow-hidden rounded-box bg-smokeyBlack p-14 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.1),inset_0_0_0_1px_rgba(255,255,255,0.1)]"><div class="absolute inset-0 -top-20 z-0 h-14 w-28 flex-none flex-grow-0 bg-purple blur-[1.75rem] transition-all duration-300" style="top:-10rem;left:0"></div><div class="flex gap-8"><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/about/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/sparks.svg" alt="Company" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Company</span><span class="text-md block text-gray-600">About us</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/careers/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rocket.svg" alt="Careers" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Careers</span><span class="text-md block text-gray-600">Join our team</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><ul class="flex-1 flex flex-col"><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/about/newsroom/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rss-feed.svg" alt="Newsroom" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Newsroom</span><span class="text-md block text-gray-600">News and events</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li><li><a class="group flex w-full items-center justify-between gap-4 rounded-lg bg-smokeyBlack p-2 transition-colors duration-100 ease-in-out hover:bg-gray-900" href="/contact/"><span class="flex w-fit flex-row items-start gap-4"><span class="rounded-md bg-gray-900 p-2 transition-colors duration-100 ease-in-out group-hover:bg-smokeyBlack"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/chat-lines.svg" alt="Contact Us" class="text-grey-600 max-w-[20px] text-[1.25rem]"/></span><span><span class="text-md block text-white">Contact Us</span><span class="text-md block text-gray-600">Get in touch</span></span></span><span class="material-symbols-rounded invisible text-[1.25rem] text-gray-600 group-hover:visible">arrow_right_alt</span></a></li></ul></div><div class=" space-y-4 border-t border-[#424242] pt-4 lg:w-1/3"><h4 class="text-display-xs xl:pe-16 2xl:pe-24 2xl:text-display-sm">Starburst’s mission is to free our customers to see the invisible and achieve the impossible</h4></div></div></div></div></div></div></li></ul><ul class="lg:text-base flex items-center gap-1 text-sm text-white 2xl:gap-6"><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="&lt;div data-open=&quot;searchModal&quot; class=&quot;main-nav-search-item&quot;&gt;&lt;img style=&quot;width:16px;height:16px;margin:0;&quot; src=&quot;https://live-starburst.pantheonsite.io/wp-content/uploads/2022/09/icon_search.png&quot; alt=&quot;Search&quot; /&gt;&lt;/div&gt;"><a class="text-white transition-colors duration-200 group-hover/mega:text-purple" href="#"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 17L21 21" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path><path d="M3 11C3 15.4183 6.58172 19 11 19C13.213 19 15.2161 18.1015 16.6644 16.6493C18.1077 15.2022 19 13.2053 19 11C19 6.58172 15.4183 3 11 3C6.58172 3 3 6.58172 3 11Z" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Contact Us"><a class="text-white transition-colors duration-200 group-hover/mega:text-purple" href="/contact/">Contact Us</a></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 rounded-lg p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white" data-menu-item="Login"><a class="text-white transition-colors duration-200 group-hover/mega:text-purple" href="https://galaxy.starburst.io/login">Login</a></li><li class="group/mega dropdown dropdown-bottom dropdown-hover static shrink-0 p-2 outline-1 has-[:focus-visible]:outline has-[:focus-visible]:outline-white rounded-[6.25rem] pb-1 pe-0 ps-1 pt-1" data-menu-item="Start Free"><a class="btn inline-flex h-auto items-center justify-center gap-2 rounded-[6.25rem] border-0 text-center font-normal shadow-none transition-colors [overflow-wrap:anywhere] focus:outline-none focus-visible:outline focus-visible:outline-1 disabled:pointer-events-none focus-visible:outline-white disabled:bg-dark-action-disabled disabled:text-dark-text-invert bg-dark-action-primary text-white hover:bg-dark-action-primary-hover active:bg-dark-action-primary-hover px-[1.375rem] py-2 text-md !min-h-[1rem] !px-[1rem] !py-1 !text-sm xl:!min-h-[3rem] xl:!px-[1.375rem] xl:!py-2" href="/free-trial/">Start Free<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.50003 11.25L11.25 1.49997M11.25 1.49997V10.86M11.25 1.49997H1.89004" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></li></ul></nav></div><div class="relative z-10 mx-auto w-full bg-smokeyBlack px-4 py-5 lg:container md:px-8 xl:px-24 xl:py-10 peer flex justify-between gap-4 lg:hidden"><a class="me-3 min-w-[151px] shrink-0 rounded-lg py-1 focus-visible:outline focus-visible:outline-white xl:me-8" href="/"><img src="/_next/static/media/starburst_logo.654cb3e5.svg" alt="Starburst logo" height="40" class="shrink-0 object-contain"/></a><label class="swap swap-rotate"><input type="checkbox" class="drawer-toggle"/><svg class="swap-off fill-white" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512"><path d="M64,384H448V341.33H64Zm0-106.67H448V234.67H64ZM64,128v42.67H448V128Z"></path></svg><svg class="swap-on fill-white" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512"><polygon points="400 145.49 366.51 112 256 222.51 145.49 112 112 145.49 222.51 256 112 366.51 145.49 400 256 289.49 366.51 400 400 366.51 289.49 256 400 145.49"></polygon></svg></label></div></header><main class="relative z-[1] bg-smokeyBlack"><div class="container relative mx-auto px-4 md:px-8 xl:px-24 z-10 pb-[100px]"><div class="mb-10 flex flex-col items-start justify-between gap-6 pt-12 md:flex-row lg:pt-24"><div class="flex flex-1 flex-col"><h1 class="pb-12 text-[2.5rem] leading-[3.25rem] text-white prose-img:max-h-60 prose-img:w-full prose-img:max-w-lg md:text-[4rem] md:leading-[4.25rem]">Deserialization part 2</h1><div class="flex items-start justify-between gap-6"><div><time class="text-sm text-gray-600">September 20, 2022</time></div><div class="block md:hidden"><ul class="flex flex-col gap-8"><li class="flex items-center gap-4"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2023/04/Jordan-Zimmerman-150x150.png" alt="Jordan Zimmerman" class="block rounded-full border border-solid border-white" width="40" height="40"/><div class="flex max-w-56 flex-col"><p class="text-xs font-semibold text-white">Jordan Zimmerman</p><p class="text-xs text-gray-600">Staff Software Engineer</p><p class="text-xs text-gray-600">Starburst</p></div></li></ul></div></div></div><div class="hidden md:block"><ul class="flex flex-col gap-8"><li class="flex items-center gap-4"><img src="https://live-starburst.pantheonsite.io/wp-content/uploads/2023/04/Jordan-Zimmerman-150x150.png" alt="Jordan Zimmerman" class="block rounded-full border border-solid border-white" width="40" height="40"/><div class="flex max-w-56 flex-col"><p class="text-xs font-semibold text-white">Jordan Zimmerman</p><p class="text-xs text-gray-600">Staff Software Engineer</p><p class="text-xs text-gray-600">Starburst</p></div></li></ul></div></div></div><div class="relative bg-white -mt-32 md:-mt-48 xl:-mt-64"><div><div class="absolute left-2/4 top-0 h-auto w-[100%] -translate-x-2/4 overflow-hidden lg:left-0 lg:h-[15rem] lg:w-full lg:translate-x-0 xl:h-[20rem] 2xl:h-[25rem]"><img alt="" fetchPriority="high" width="2880" height="433" decoding="async" data-nimg="1" class="-ml-px h-auto w-[calc(100%_+_2px)] max-w-[calc(100%_+_2px)] object-contain lg:h-full lg:object-fill" style="color:transparent" srcSet="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Feclipse-top.a338658d.png&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve 1x" src="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Feclipse-top.a338658d.png&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve"/></div><div class="absolute bottom-0 left-2/4 h-auto w-[100%] -translate-x-2/4 overflow-hidden lg:left-0 lg:h-[15rem] lg:w-full lg:translate-x-0 xl:h-[20rem] 2xl:h-[25rem]"><img alt="" loading="lazy" width="2880" height="463" decoding="async" data-nimg="1" class="-ml-px h-auto w-[calc(100%_+_2px)] max-w-[calc(100%_+_2px)] object-contain lg:h-full lg:object-fill" style="color:transparent" srcSet="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Feclipse-bottom.96f049e9.png&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve 1x" src="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Feclipse-bottom.96f049e9.png&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve"/></div></div><div class="relative min-h-[600px] py-32 md:py-48 xl:py-64"><div class="container relative mx-auto px-4 md:px-8 xl:px-24 pb-16 md:pb-24"><div class="mt-24 block grid-cols-12 gap-x-10 gap-y-6 sm:gap-y-24 md:grid"><div class="col-span-12 gap-12 border-t border-solid border-t-[#080808] md:col-span-4 lg:col-span-3"><div class="md:sticky md:top-[0.6rem]"><div class=""><p class="color={#080808} py-6 text-md">Share</p><div class="flex gap-4"><button class="react-share__ShareButton h-10 w-10" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><img class="h-10 w-10 rounded-full border border-solid border-[#080808]" src="/_next/static/media/linkedin.3e7e21af.svg" alt="Linkedin icon" height="40" width="40"/></button><button class="react-share__ShareButton h-10 w-10" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><img class="h-10 w-10 rounded-full border border-solid border-[#080808]" src="/_next/static/media/facebook.07186c97.svg" alt="Facebook icon" height="40" width="40"/></button><button class="react-share__ShareButton h-10 w-10" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><img class="h-10 w-10 rounded-full border border-solid border-[#080808]" src="/_next/static/media/twitterx.eef7c637.svg" alt="Twitter icon" height="40" width="40"/></button></div></div><div><h4 class="color-[#757575] m-0 mb-5 mt-8 text-xl font-semibold">More deployment options</h4><ul class="flex flex-col gap-4"><li class="border-t border-solid border-t-[#080808] py-4"><a class="text-sm text-[#757575] hover:text-[rgba(117,117,117,0.6)]" href="/platform/starburst-enterprise/">Request Enterprise trial license key <span class="ml-1">→</span></a></li></ul></div></div></div><div class="col-span-12 flex max-w-full flex-col gap-4 border-t border-solid border-t-[#080808] pt-14 md:col-span-8 md:pt-6 lg:col-span-9"><div class="prose-sb-full min-w-full"><p><em>This is part 6 of the Bleeding edge Java series. <a href="https://www.starburst.io/blog/2022-09-20-bej0-introduction.html">Start at the introduction</a> if you haven’t already.</em></p> <p>In the first part of the deserialization article we defined a framework for deserializing simple Java types. Now we add support for complex types.</p> <p>First we update the implementation of <code class="language-plaintext highlighter-rouge">deserializerFor</code> to include the complex types we handle:</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="nc">TypedDeserializer</span> <span class="nf">deserializerFor</span><span class="o">(</span><span class="nc">TypedDeserializer</span> <span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">Type</span> <span class="n">type</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="nf">switch</span> <span class="o">(</span><span class="n">type</span><span class="o">)</span> <span class="o">{</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">byte</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Byte</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">byteValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">short</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Short</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">shortValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">int</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Integer</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">intValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">long</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Long</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">longValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">float</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Float</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">floatValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">double</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Double</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">numberToken</span> <span class="o">-&gt;</span> <span class="n">numberToken</span><span class="o">.</span><span class="na">value</span><span class="o">().</span><span class="na">doubleValue</span><span class="o">());</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kt">boolean</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">||</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">Boolean</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">BooleanToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">BooleanToken:</span><span class="o">:</span><span class="n">value</span><span class="o">);</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="nc">Number</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">isAssignableFrom</span><span class="o">(</span><span class="n">clazz</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">NumberToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">NumberToken:</span><span class="o">:</span><span class="n">value</span><span class="o">);</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="nc">String</span><span class="o">.</span><span class="na">class</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">StringToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">StringToken:</span><span class="o">:</span><span class="n">value</span><span class="o">);</span> <span class="k">case</span> <span class="nc">ParameterizedType</span> <span class="n">parameterizedType</span> <span class="nf">when</span> <span class="o">(</span><span class="n">parameterizedType</span><span class="o">.</span><span class="na">getRawType</span><span class="o">()</span> <span class="k">instanceof</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nc">Collection</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">isAssignableFrom</span><span class="o">(</span><span class="n">clazz</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">collectionTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="n">clazz</span><span class="o">,</span> <span class="n">parameterizedType</span><span class="o">.</span><span class="na">getActualTypeArguments</span><span class="o">()[</span><span class="mi">0</span><span class="o">]);</span> <span class="k">case</span> <span class="nc">ParameterizedType</span> <span class="n">parameterizedType</span> <span class="nf">when</span> <span class="o">(</span><span class="n">parameterizedType</span><span class="o">.</span><span class="na">getRawType</span><span class="o">()</span> <span class="k">instanceof</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">isAssignableFrom</span><span class="o">(</span><span class="n">clazz</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">optionalTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="n">parameterizedType</span><span class="o">.</span><span class="na">getActualTypeArguments</span><span class="o">()[</span><span class="mi">0</span><span class="o">]);</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">isRecord</span><span class="o">()</span> <span class="o">-&gt;</span> <span class="n">recordTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="n">clazz</span><span class="o">);</span> <span class="k">case</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">clazz</span> <span class="n">when</span> <span class="n">clazz</span><span class="o">.</span><span class="na">isEnum</span><span class="o">()</span> <span class="o">-&gt;</span> <span class="n">enumTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="n">clazz</span><span class="o">);</span> <span class="k">default</span> <span class="o">-&gt;</span> <span class="k">throw</span> <span class="k">new</span> <span class="nc">RuntimeException</span><span class="o">();</span> <span class="o">};</span> <span class="o">}</span></code></pre> </div> </div> </div> <h3 id="enumerations">Enumerations</h3> <p>Use simpleTypedDeserializer to accept a string and use the string to build the enum.</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="nc">TypedDeserializer</span> <span class="nf">enumTypedDeserializer</span><span class="o">(</span><span class="nc">TypedDeserializer</span> <span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">enumClass</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="nf">simpleTypedDeserializer</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">StringToken</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">stringToken</span> <span class="o">-&gt;</span> <span class="nc">Stream</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="n">enumClass</span><span class="o">.</span><span class="na">getEnumConstants</span><span class="o">()).</span><span class="na">filter</span><span class="o">(</span><span class="n">c</span> <span class="o">-&gt;</span> <span class="n">c</span><span class="o">.</span><span class="na">toString</span><span class="o">().</span><span class="na">equals</span><span class="o">(</span><span class="n">stringToken</span><span class="o">.</span><span class="na">value</span><span class="o">())).</span><span class="na">findFirst</span><span class="o">().</span><span class="na">orElseThrow</span><span class="o">(</span><span class="nl">RuntimeException:</span><span class="o">:</span><span class="k">new</span><span class="o">));</span> <span class="o">}</span></code></pre> </div> </div> </div> <h3 id="optional">Optional</h3> <p>The pattern matching in the <code class="language-plaintext highlighter-rouge">deserializerFor()</code> switch will have extracted the Optional’s component type. We get the deserializer for that component type, get its value and then pass that value through <code class="language-plaintext highlighter-rouge">Optional.ofNullable()</code>.</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="nc">TypedDeserializer</span> <span class="nf">optionalTypedDeserializer</span><span class="o">(</span><span class="nc">TypedDeserializer</span> <span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">Type</span> <span class="n">componentType</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="k">new</span> <span class="nf">TypedDeserializer</span><span class="o">()</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">final</span> <span class="nc">TypedDeserializer</span> <span class="n">valueDeserializer</span> <span class="o">=</span> <span class="n">deserializerFor</span><span class="o">(</span><span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="n">componentType</span><span class="o">);</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">TypedDeserializer</span> <span class="nf">accept</span><span class="o">(</span><span class="nc">JsonToken</span> <span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="n">valueDeserializer</span><span class="o">.</span><span class="na">accept</span><span class="o">(</span><span class="n">jsonToken</span><span class="o">);</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">Object</span> <span class="nf">value</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">ofNullable</span><span class="o">(</span><span class="n">valueDeserializer</span><span class="o">.</span><span class="na">value</span><span class="o">());</span> <span class="o">}</span> <span class="o">};</span> <span class="o">}</span></code></pre> </div> </div> </div> <h3 id="collections">Collections</h3> <p>For collections we keep a list of a deserializers for each value in the collection. When the parent deserializer asks for the collection value, we can then process each deserializer to get its final value. We must perform this delayed value resolution because all the tokens that apply to the collection must be processed before the value can be determined.</p> <p>The deserializer does the following:</p> <ul> <li>Wait for the BeginArrayToken to mark that the collection has started</li> <li>Set a flag to indicate that a value is expected once the collection has started</li> <li>Check the next token to see if it’s an EndArrayToken when the value-expected flag is set <ul> <li>If so, the collection is complete</li> <li>If not, get a new deserializer for the list’s component type and add it to values and set it as the next deserializer</li> </ul> </li> <li>If a ValueSeparatorToken is accepted, reset for a new value</li> <li>Otherwise wait for EndArrayToken</li> </ul> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="nc">TypedDeserializer</span> <span class="nf">collectionTypedDeserializer</span><span class="o">(</span><span class="nc">TypedDeserializer</span> <span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">collectionClass</span><span class="o">,</span> <span class="nc">Type</span> <span class="n">componentType</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="k">new</span> <span class="nf">TypedDeserializer</span><span class="o">()</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">final</span> <span class="nc">List</span><span class="o">&lt;</span><span class="nc">TypedDeserializer</span><span class="o">&gt;</span> <span class="n">values</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o">&lt;&gt;();</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">started</span><span class="o">;</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">isDone</span><span class="o">;</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">expectingValue</span><span class="o">;</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">TypedDeserializer</span> <span class="nf">accept</span><span class="o">(</span><span class="nc">JsonToken</span> <span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="nc">TypedDeserializer</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span> <span class="k">if</span> <span class="o">(</span><span class="n">expectingValue</span><span class="o">)</span> <span class="o">{</span> <span class="n">expectingValue</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span> <span class="k">switch</span> <span class="o">(</span><span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="k">case</span> <span class="nc">EndArrayToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="n">accept</span><span class="o">(</span><span class="n">jsonToken</span><span class="o">);</span> <span class="c1">// it's an empty array</span> <span class="o">}</span> <span class="k">default</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="nc">TypedDeserializer</span> <span class="n">valueTypedDeserializer</span> <span class="o">=</span> <span class="n">deserializerFor</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="n">componentType</span><span class="o">);</span> <span class="n">values</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">valueTypedDeserializer</span><span class="o">);</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="n">valueTypedDeserializer</span><span class="o">.</span><span class="na">accept</span><span class="o">(</span><span class="n">jsonToken</span><span class="o">);</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> <span class="k">switch</span> <span class="o">(</span><span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="k">case</span> <span class="nc">BeginArrayToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(</span><span class="n">started</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">started</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="n">expectingValue</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="o">}</span> <span class="k">case</span> <span class="nc">EndArrayToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">started</span> <span class="o">||</span> <span class="n">isDone</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="n">parentTypedDeserializer</span><span class="o">;</span> <span class="n">isDone</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="o">}</span> <span class="k">case</span> <span class="nc">ValueSeparatorToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">started</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">expectingValue</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="o">}</span> <span class="k">default</span> <span class="o">-&gt;</span> <span class="k">throw</span> <span class="k">new</span> <span class="nc">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="o">}</span> <span class="k">return</span> <span class="n">nextTypedDeserializer</span><span class="o">;</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">Object</span> <span class="nf">value</span><span class="o">()</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">isDone</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="c1">// get the final value from each of the stored deserializers</span> <span class="nc">Stream</span><span class="o">&lt;</span><span class="nc">Object</span><span class="o">&gt;</span> <span class="n">valueStream</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">map</span><span class="o">(</span><span class="nl">TypedDeserializer:</span><span class="o">:</span><span class="n">value</span><span class="o">);</span> <span class="c1">// create either a set or a list depending on the collection class</span> <span class="k">return</span> <span class="nc">Set</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">isAssignableFrom</span><span class="o">(</span><span class="n">collectionClass</span><span class="o">)</span> <span class="o">?</span> <span class="n">valueStream</span><span class="o">.</span><span class="na">collect</span><span class="o">(</span><span class="nc">Collectors</span><span class="o">.</span><span class="na">toSet</span><span class="o">())</span> <span class="o">:</span> <span class="n">valueStream</span><span class="o">.</span><span class="na">toList</span><span class="o">();</span> <span class="o">}</span> <span class="o">};</span> <span class="o">}</span></code></pre> </div> </div> </div> <h3 id="records">Records</h3> <p>For records we use the record’s array of RecordComponents to know the names and types of the fields to expect in the object. Similar to the collection deserializer we keep a map whose key is the name of the field and the value is the deserializer for the component’s type. Just like for collections, when the parent deserializer asks for the record value, we can then process each deserializer to get its final value. We must perform this delayed value resolution because all the tokens that apply to the record must be processed before the value can be determined.</p> <p>The deserializer does the following:</p> <ul> <li>Wait for BeginObjectToken to mark that the object has started</li> <li>Expect that ObjectNameToken is the next token. Once the ObjectNameToken is accepted: <ul> <li>Get a new deserializer for the record component’s type and add it to values map</li> <li>Set it as the next deserializer</li> </ul> </li> <li>If a ValueSeparatorToken is accepted, reset for another BeginObjectToken, otherwise, wait for EndObjectToken</li> <li>Build the final value by using the RecordComponents to find the canonical Constructor, create an array of values and create the record via reflection</li> </ul> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="nc">TypedDeserializer</span> <span class="nf">recordTypedDeserializer</span><span class="o">(</span><span class="nc">TypedDeserializer</span> <span class="n">parentTypedDeserializer</span><span class="o">,</span> <span class="nc">Class</span><span class="o">&lt;?&gt;</span> <span class="n">recordClass</span><span class="o">)</span> <span class="o">{</span> <span class="nc">RecordComponent</span><span class="o">[]</span> <span class="n">recordComponents</span> <span class="o">=</span> <span class="n">recordClass</span><span class="o">.</span><span class="na">getRecordComponents</span><span class="o">();</span> <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">RecordComponent</span><span class="o">&gt;</span> <span class="n">recordComponentMap</span> <span class="o">=</span> <span class="nc">Stream</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="n">recordComponents</span><span class="o">).</span><span class="na">collect</span><span class="o">(</span><span class="nc">Collectors</span><span class="o">.</span><span class="na">toMap</span><span class="o">(</span><span class="nl">RecordComponent:</span><span class="o">:</span><span class="n">getName</span><span class="o">,</span> <span class="nc">Function</span><span class="o">.</span><span class="na">identity</span><span class="o">()));</span> <span class="k">return</span> <span class="k">new</span> <span class="nf">TypedDeserializer</span><span class="o">()</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">final</span> <span class="nc">Map</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">,</span> <span class="nc">TypedDeserializer</span><span class="o">&gt;</span> <span class="n">valuesMap</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">HashMap</span><span class="o">&lt;&gt;();</span> <span class="kd">private</span> <span class="nc">String</span> <span class="n">currentName</span><span class="o">;</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">started</span><span class="o">;</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">isDone</span><span class="o">;</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">TypedDeserializer</span> <span class="nf">accept</span><span class="o">(</span><span class="nc">JsonToken</span> <span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="nc">TypedDeserializer</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span> <span class="k">switch</span> <span class="o">(</span><span class="n">jsonToken</span><span class="o">)</span> <span class="o">{</span> <span class="k">case</span> <span class="nc">BeginObjectToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(</span><span class="n">started</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> <span class="n">started</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="o">}</span> <span class="o">}</span> <span class="k">case</span> <span class="nf">ObjectNameToken</span><span class="o">(</span><span class="kt">var</span> <span class="n">name</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">started</span> <span class="o">||</span> <span class="o">(</span><span class="n">currentName</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">currentName</span> <span class="o">=</span> <span class="n">name</span><span class="o">;</span> <span class="nc">RecordComponent</span> <span class="n">recordComponent</span> <span class="o">=</span> <span class="n">recordComponentMap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">currentName</span><span class="o">);</span> <span class="k">if</span> <span class="o">(</span><span class="n">recordComponent</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="nc">TypedDeserializer</span> <span class="n">typedDeserializer</span> <span class="o">=</span> <span class="n">deserializerFor</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="n">recordComponent</span><span class="o">.</span><span class="na">getGenericType</span><span class="o">());</span> <span class="n">valuesMap</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">currentName</span><span class="o">,</span> <span class="n">typedDeserializer</span><span class="o">);</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="n">typedDeserializer</span><span class="o">;</span> <span class="o">}</span> <span class="k">case</span> <span class="nc">EndObjectToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">started</span> <span class="o">||</span> <span class="n">isDone</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">nextTypedDeserializer</span> <span class="o">=</span> <span class="n">parentTypedDeserializer</span><span class="o">;</span> <span class="n">isDone</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> <span class="o">}</span> <span class="k">case</span> <span class="nc">ValueSeparatorToken</span> <span class="n">__</span> <span class="o">-&gt;</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">started</span> <span class="o">||</span> <span class="o">(</span><span class="n">currentName</span> <span class="o">==</span> <span class="kc">null</span><span class="o">))</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="n">currentName</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> <span class="o">}</span> <span class="k">default</span> <span class="o">-&gt;</span> <span class="k">throw</span> <span class="k">new</span> <span class="nc">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="k">return</span> <span class="n">nextTypedDeserializer</span><span class="o">;</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="nc">Object</span> <span class="nf">value</span><span class="o">()</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(!</span><span class="n">isDone</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">();</span> <span class="o">}</span> <span class="nc">Class</span><span class="o">&lt;?&gt;[]</span> <span class="n">argumentTypes</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Class</span><span class="o">[</span><span class="n">recordComponents</span><span class="o">.</span><span class="na">length</span><span class="o">];</span> <span class="nc">Object</span><span class="o">[]</span> <span class="n">arguments</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Object</span><span class="o">[</span><span class="n">recordComponents</span><span class="o">.</span><span class="na">length</span><span class="o">];</span> <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">recordComponents</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="o">++</span><span class="n">i</span><span class="o">)</span> <span class="o">{</span> <span class="nc">RecordComponent</span> <span class="n">recordComponent</span> <span class="o">=</span> <span class="n">recordComponents</span><span class="o">[</span><span class="n">i</span><span class="o">];</span> <span class="n">argumentTypes</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">recordComponent</span><span class="o">.</span><span class="na">getType</span><span class="o">();</span> <span class="nc">TypedDeserializer</span> <span class="n">valueTypedDeserializer</span> <span class="o">=</span> <span class="n">valuesMap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">recordComponent</span><span class="o">.</span><span class="na">getName</span><span class="o">());</span> <span class="k">if</span> <span class="o">(</span><span class="n">valueTypedDeserializer</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(</span><span class="nc">Optional</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">isAssignableFrom</span><span class="o">(</span><span class="n">recordComponent</span><span class="o">.</span><span class="na">getType</span><span class="o">()))</span> <span class="o">{</span> <span class="n">arguments</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="nc">Optional</span><span class="o">.</span><span class="na">empty</span><span class="o">();</span> <span class="o">}</span> <span class="c1">// otherwise leave it null</span> <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> <span class="n">arguments</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">valueTypedDeserializer</span><span class="o">.</span><span class="na">value</span><span class="o">();</span> <span class="o">}</span> <span class="o">}</span> <span class="k">try</span> <span class="o">{</span> <span class="k">return</span> <span class="n">recordClass</span><span class="o">.</span><span class="na">getConstructor</span><span class="o">(</span><span class="n">argumentTypes</span><span class="o">).</span><span class="na">newInstance</span><span class="o">(</span><span class="n">arguments</span><span class="o">);</span> <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">InstantiationException</span> <span class="o">|</span> <span class="nc">IllegalAccessException</span> <span class="o">|</span> <span class="nc">InvocationTargetException</span> <span class="o">|</span> <span class="nc">NoSuchMethodException</span> <span class="o">|</span> <span class="nc">IllegalArgumentException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="k">throw</span> <span class="k">new</span> <span class="nf">RuntimeException</span><span class="o">(</span><span class="n">e</span><span class="o">);</span> <span class="o">}</span> <span class="o">}</span> <span class="o">};</span> <span class="o">}</span></code></pre> </div> </div> </div> <h2 id="generics">Generics</h2> <p>Because of <a href="https://docs.oracle.com/javase/tutorial/java/generics/erasure.html" target="_blank" rel="noopener">erasure</a>, there is no way in Java to specify many object types that we might want to deserialize such as generic lists (e.g. <code class="language-plaintext highlighter-rouge">List&lt;String&gt;</code>). However generic type information is not completely lost at compile-time in Java. The Java runtime retains a surprising amount of generic type information. In fact, we can create a real generic type for any generic definition we need by using a very simple utility called a “type token”. Sadly, the JDK does not include a utility to create these type tokens. Fortunately, the code to create them is just a few Java lines. The included <a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java" target="_blank" rel="noopener">TypeToken.java</a> utility provides this. To create a type token for a list of strings write:</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="c1">// create a type token that represents a list of string</span> <span class="nc">TypeToken</span><span class="o">&lt;</span><span class="nc">List</span><span class="o">&lt;</span><span class="nc">String</span><span class="o">&gt;&gt;</span> <span class="n">typeToken</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TypeToken</span><span class="o">&lt;&gt;(){};</span></code></pre> </div> </div> </div> <p>We can use this type token to deserialize a list of records, strings, optionals, and others:</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="kt">var</span> <span class="n">parser</span> <span class="o">=</span> <span class="nc">JsonParser</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="kt">var</span> <span class="n">deserializer</span> <span class="o">=</span> <span class="nc">JsonDeserializer</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="nc">String</span> <span class="n">jsonText</span> <span class="o">=</span> <span class="s">"[1, 2, 3]"</span><span class="o">;</span> <span class="nc">TypeToken</span><span class="o">&lt;</span><span class="nc">List</span><span class="o">&lt;</span><span class="nc">Integer</span><span class="o">&gt;&gt;</span> <span class="n">typeToken</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">TypeToken</span><span class="o">&lt;&gt;()</span> <span class="o">{};</span> <span class="nc">List</span><span class="o">&lt;</span><span class="nc">Integer</span><span class="o">&gt;</span> <span class="n">ints</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="na">parse</span><span class="o">(</span><span class="n">jsonText</span><span class="o">.</span><span class="na">chars</span><span class="o">()).</span><span class="na">collect</span><span class="o">(</span><span class="nc">JsonDeserializerCollector</span><span class="o">.</span><span class="na">deserializing</span><span class="o">(</span><span class="n">deserializer</span><span class="o">,</span> <span class="n">typeToken</span><span class="o">));</span></code></pre> </div> </div> </div> <h2 id="test-it-out-for-yourself">Test it out for yourself!</h2> <p>In the previous articles we developed a serializer, a printer and a parser. Now we can do a complete round trip from a Java object, to JSON tokens, to JSON text, back to JSON tokens and back to the original Java object.</p> <p>Let’s put this together in jshell. The example uses these files:</p> <ul> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java" target="_blank" rel="noopener">TypeToken.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonToken.java" target="_blank" rel="noopener">JsonToken.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonSerializer.java" target="_blank" rel="noopener">JsonSerializer.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/StringUtils.java" target="_blank" rel="noopener">StringUtils.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonPrinter.java" target="_blank" rel="noopener">JsonPrinter.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonParser.java" target="_blank" rel="noopener">JsonParser.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializer.java" target="_blank" rel="noopener">JsonDeserializer.java</a></li> <li><a href="https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializerCollector.java" target="_blank" rel="noopener">JsonDeserializerCollector.java</a></li> </ul> <p>From a terminal with <a href="https://jdk.java.net/19/" target="_blank" rel="noopener">Java 19</a> installed, run the following (note you’ll need the <a href="https://wiki.archiveteam.org/index.php/Wget_installation" target="_blank" rel="noopener">wget utility</a>):</p> <div class="language-shell highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code>wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonToken.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonSerializer.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/StringUtils.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonPrinter.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonParser.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializer.java wget <span class="nt">-nc</span> https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializerCollector.java jshell <span class="nt">--enable-preview</span> TypeToken.java JsonToken.java JsonSerializer.java StringUtils.java JsonPrinter.java JsonParser.java JsonDeserializer.java JsonDeserializerCollector.java</code></pre> </div> </div> </div> <p>Inside jshell let’s serialize a Java record into JSON tokens, print those tokens into JSON text, parse that text back into a stream of JSON tokens and finally deserialize those tokens back into a Java record. We can compare the two records to ensure it worked properly.</p> <div class="language-java highlighter-rouge"> <div class="highlight"> <div class="hcb_wrap"> <pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span class="kt">var</span> <span class="n">serializer</span> <span class="o">=</span> <span class="nc">JsonSerializer</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="kt">var</span> <span class="n">printer</span> <span class="o">=</span> <span class="nc">JsonPrinter</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="kt">var</span> <span class="n">parser</span> <span class="o">=</span> <span class="nc">JsonParser</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="kt">var</span> <span class="n">deserializer</span> <span class="o">=</span> <span class="nc">JsonDeserializer</span><span class="o">.</span><span class="na">instance</span><span class="o">();</span> <span class="n">record</span> <span class="nf">Person</span><span class="o">(</span><span class="nc">String</span> <span class="n">name</span><span class="o">,</span> <span class="kt">int</span> <span class="n">age</span><span class="o">)</span> <span class="o">{}</span> <span class="kt">var</span> <span class="n">person</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">Person</span><span class="o">(</span><span class="s">"someone"</span><span class="o">,</span> <span class="mi">28</span><span class="o">);</span> <span class="kt">var</span> <span class="n">deserializedPerson</span> <span class="o">=</span> <span class="n">serializer</span><span class="o">.</span><span class="na">serialize</span><span class="o">(</span><span class="n">person</span><span class="o">)</span> <span class="c1">// serialize to stream of JsonToken</span> <span class="o">.</span><span class="na">map</span><span class="o">(</span><span class="nl">printer:</span><span class="o">:</span><span class="n">print</span><span class="o">)</span> <span class="c1">// map each JsonToken to a String (as a CharSequence)</span> <span class="o">.</span><span class="na">map</span><span class="o">(</span><span class="nl">CharSequence:</span><span class="o">:</span><span class="n">chars</span><span class="o">)</span> <span class="c1">// map each CharSequence to an IntStream</span> <span class="o">.</span><span class="na">flatMap</span><span class="o">(</span><span class="nl">parser:</span><span class="o">:</span><span class="n">parse</span><span class="o">)</span> <span class="c1">// pass each IntStream to the parser and flatten the resulting stream of tokens</span> <span class="o">.</span><span class="na">collect</span><span class="o">(</span><span class="nc">JsonDeserializerCollector</span><span class="o">.</span><span class="na">deserializing</span><span class="o">(</span><span class="n">deserializer</span><span class="o">,</span> <span class="nc">Person</span><span class="o">.</span><span class="na">class</span><span class="o">));</span> <span class="c1">// use the collector to reduce the tokens into a Person via the deserializer</span> <span class="k">if</span> <span class="o">(</span><span class="n">person</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="n">deserializedPerson</span><span class="o">))</span> <span class="o">{</span> <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"It worked!"</span><span class="o">);</span> <span class="o">}</span> <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Done."</span><span class="o">);</span></code></pre> </div> </div> </div> <h2 id="summary">Summary</h2> <p>We rounded out deserialization nicely now and have a full library at our hands. Lets move on to our final thoughts in the series conclusion.</p> <h2 id="were-hiring">We’re hiring</h2> <p>Want to be able to use the latest features of Java? <a href="https://www.starburst.io/careers/" target="_blank" rel="noopener">We’re hiring!</a></p> <hr /> <p>Jordan Zimmerman is a Senior Software Engineer working on <a href="https://www.starburst.io/platform/starburst-galaxy/" target="_blank" rel="noopener">Starburst Galaxy</a>.</p> </div></div></div></div></div></div></main><div id="pre-footer" class="pointer-events-none relative z-[1] w-full max-lg:-mb-5 max-lg:overflow-hidden max-lg:rounded-b-3xl transition-all duration-300 " style="--component-height:0px;border-left:none;border-right:none"><div id="pre-footer-path" class="relative z-10 w-full bg-smokeyBlack lg:rounded-b-3xl"><div class="relative aspect-[3_/_1] overflow-hidden"><div class="planet-dark"><img alt="Starburst logo" fetchPriority="high" width="1700" height="1700" decoding="async" data-nimg="1" class="mt-[-2%] w-full animate-pulse-short" style="color:transparent" srcSet="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fdark-planet.314d4985.webp&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve 1x" src="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fdark-planet.314d4985.webp&amp;w=1920&amp;q=75&amp;dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve"/></div></div></div></div><footer class="footer bottom-0 left-0 right-0 mx-auto flex flex-col justify-end bg-offWhite px-2 lg:fixed lg:min-h-screen" data-theme="light"><div class="max-h-800:gap-y-10 container mx-auto grid grid-cols-5 gap-y-12 px-4 pb-12 pt-20 md:px-8 lg:gap-y-[10.5rem] xl:px-24"><div class="col-span-5 lg:col-span-2"><a href="/"><img src="/_next/static/media/starburst-logo-bw.3bc0959e.svg" alt="Starburst logo" height="40" class="w-[142px] shrink-0 object-contain"/></a><p class="mt-4 max-w-sm pe-5 text-[1.75rem] font-light leading-[2.313rem] tracking-[-0.035rem] opacity-70">Best-in-class performance at scale for everyone</p></div><div class="col-span-5 w-full md:mt-[4.5rem] lg:col-span-3 lg:mt-0 lg:justify-self-end"><nav class="grid grid-cols-2 gap-6 md:grid-cols-4"><ul class="max-h-800:gap-[24px] col-span-2 grid grid-cols-2 gap-[50px]"><li class="col-span-1"><span class="mb-3 block text-lg font-bold">Resources</span><ul class="font-light"><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/resources/">Resource Library</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/learn/events-webinars/">Events and Webinars</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="https://docs.starburst.io/">Documentation</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/tutorials/">Tutorials</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/blog/">Blog</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/blog/what-is-trino/">Open-source Trino</a></li></ul></li><li class="col-span-1"><span class="mb-3 block text-lg font-bold">Get In Touch</span><ul class="font-light"><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/contact/">Contact Us</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="/careers/">Careers</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="https://starburstsupport.force.com/s/login/">Customer Support</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="https://www.trinoforum.org/">Forum</a></li><li class="mb-2 opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100"><a class="text-nowrap" href="https://partners.starburstdata.com/">Partner Login</a></li></ul></li></ul><div class="col-span-2 flex flex-col"><div class="border-b border-t border-solid border-y-[#C5C5C5] py-4"><div class="flex justify-between text-display-xs font-light"><span class="max-w-32">Read our reviews on</span><img src="/_next/static/media/g2-seeklogo.fbedb5c2.svg" alt="G2 logo" height="64" width="52"/></div><a href="https://www.g2.com/products/starburst/reviews?utm_source=review-widget" class="mt-3 inline-block duration-200 hover:-translate-y-1 hover:translate-x-1" target="_blank" rel="noopener noreferrer" aria-label="Read Starburst reviews on G2"><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M1.00005 14L14 0.999958M14 0.999958V13.48M14 0.999958L1.52005 0.999958" stroke="#080808" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></a></div><div class="mt-5 flex w-full justify-between"><a href="https://www.instagram.com/lifeatstarburst/" target="_blank" rel="noopener noreferrer" class="rounded-full"><img src="/_next/static/media/instagram.89a5a5fa.svg" alt="Follow us on Instagram" height="40" width="40" class="duration-200 hover:scale-150"/></a><a href="https://www.youtube.com/c/StarburstData" target="_blank" rel="noopener noreferrer" class="rounded-full"><img src="/_next/static/media/youtube.29a80630.svg" alt="Follow us on YouTube" height="40" width="40" class="duration-200 hover:scale-150"/></a><a href="https://www.linkedin.com/company/starburstdata" target="_blank" rel="noopener noreferrer" class="rounded-full"><img src="/_next/static/media/linkedin.3e7e21af.svg" alt="Connect with us on LinkedIn" height="40" width="40" class="duration-200 hover:scale-150"/></a><a href="https://www.facebook.com/starburstdata" target="_blank" rel="noopener noreferrer" class="rounded-full"><img src="/_next/static/media/facebook.07186c97.svg" alt="Like us on Facebook" height="40" width="40" class="duration-200 hover:scale-150"/></a><a href="https://twitter.com/starburstdata" target="_blank" rel="noopener noreferrer" class="rounded-full"><img src="/_next/static/media/twitterx.eef7c637.svg" alt="Follow us on Twitter" height="40" width="40" class="duration-200 hover:scale-150"/></a></div></div></nav></div><div class="col-span-5 flex gap-6 md:mt-[7.5rem] lg:col-span-2 lg:mt-0"><a class="opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100" href="/privacy-policy/">Privacy Policy</a><a class="opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100" href="/terms/">Legal Terms</a><a class="opacity-70 duration-300 hover:text-smokeyBlack hover:opacity-100" href="/cookie-notice/">Cookie Notice</a></div><div class="col-span-5 opacity-70 lg:col-span-3">© Starburst Data, Inc. Starburst and Starburst Data are registered trademarks of Starburst Data, Inc. All rights reserved. Presto®, the Presto logo, Delta Lake, and the Delta Lake logo are trademarks of LF Projects, LLC</div></div></footer><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><script src="/_next/static/chunks/webpack-2eb718e7b5141997.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/media/0f3a385557f1712f-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/media/47cbc4e2adbc5db9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n3:HL[\"/_next/static/media/623acd25753df814-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n4:HL[\"/_next/static/media/8f65835aa057b6ed-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n5:HL[\"/_next/static/media/ab06f05c30d46390-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n6:HL[\"/_next/static/media/b0047e94e7f0c63f-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n7:HL[\"/_next/static/media/cb07cb684de218c2-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n8:HL[\"/_next/static/media/d18c671c86d7369a-s.p.otf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/otf\"}]\n9:HL[\"/_next/static/css/2a2f849d6f345c35.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"style\"]\na:HL[\"/_next/static/css/1b7ebf9df0d571ae.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"style\"]\n"])</script><script>self.__next_f.push([1,"b:I[95751,[],\"\"]\ne:I[39275,[],\"\"]\n10:I[61343,[],\"\"]\n15:I[76130,[],\"\"]\nf:[\"uri\",\"2022-09-20-bej6-deserialization-html\",\"c\"]\n16:[]\n"])</script><script>self.__next_f.push([1,"0:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/2a2f849d6f345c35.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1b7ebf9df0d571ae.css?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"$Lb\",null,{\"buildId\":\"urekz0exvdjK4nvOY9zaK\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/blog/2022-09-20-bej6-deserialization-html\",\"initialTree\":[\"\",{\"children\":[\"(blog)\",{\"children\":[\"blog\",{\"children\":[[\"uri\",\"2022-09-20-bej6-deserialization-html\",\"c\"],{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"(blog)\",{\"children\":[\"blog\",{\"children\":[[\"uri\",\"2022-09-20-bej6-deserialization-html\",\"c\"],{\"children\":[\"__PAGE__\",{},[[\"$Lc\",\"$Ld\"],null],null]},[\"$\",\"$Le\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"(blog)\",\"children\",\"blog\",\"children\",\"$f\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[[\"$L11\",[\"$\",\"main\",null,{\"className\":\"relative z-[1] bg-smokeyBlack\",\"children\":[\"$\",\"$Le\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"(blog)\",\"children\",\"blog\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}]}],\"$L12\"],null],null]},[\"$\",\"$Le\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"(blog)\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$L13\",null],null],\"couldBeIntercepted\":false,\"initialHead\":[false,\"$L14\"],\"globalErrorComponent\":\"$15\",\"missingSlots\":\"$W16\"}]]\n"])</script><script>self.__next_f.push([1,"17:I[62004,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9694\",\"static/chunks/9694-0e03a8f218864453.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3940\",\"static/chunks/3940-66c9f0077154b71a.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1592\",\"static/chunks/1592-861e30ea675fe617.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2004\",\"static/chunks/2004-c54969ea7b791b60.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2551\",\"static/chunks/2551-25d3d36742795948.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2156\",\"static/chunks/app/(blog)/blog/layout-9a00538124e3a821.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"FooterNavigation\"]\n18:I[84080,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"\"]\n1a:I[27640,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"GoogleTagManager\"]\n1b:\"$Sreact.suspense\"\n1c:I[10912,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"BailoutToCSR\"]\n1d:I[5378,"])</script><script>self.__next_f.push([1,"[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"default\"]\n1e:I[88768,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"QualifiedMeeting\"]\n20:I[35632,[\"922\",\"static/chunks/c15bf2b0-77a7fe2edf0e5bbc.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9694\",\"static/chunks/9694-0e03a8f218864453.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"4220\",\"static/chunks/4220-7dc82827145f5c67.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8492\",\"static/chunks/8492-3b90b6c0ed21004c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9783\",\"static/chunks/9783-b99abd041c65f619.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1928\",\"static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5632\",\"static/chunks/5632-c16f65d3b85ec224.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2104\",\"static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5030\",\"static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9254\",\"static/chunks/app/(blog)/blog/page-e0ac88d1c7c3a619.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"HeroBlock\"]\n22:I[77992,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf"])</script><script>self.__next_f.push([1,"9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"default\"]\n23:I[66025,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"default\"]\n24:I[64404,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5223\",\"static/chunks/5223-924afc0af4c53064.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3185\",\"static/chunks/app/layout-3142c1b00380dd49.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"GoogleAnalytics\"]\n12:[\"$\",\"$L17\",null,{\"navMenuItems\":[{\"id\":\"cG9zdDo3OTY0\",\"label\":\"Resources\",\"uri\":\"#\",\"subItems\":[{\"id\":\"cG9zdDo3OTUz\",\"label\":\"Resource Library\",\"uri\":\"/resources/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTUy\",\"label\":\"Events and Webinars\",\"uri\":\"/learn/events-webinars/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTU1\",\"label\":\"Documentation\",\"uri\":\"https://docs.starburst.io/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDozNzk5OQ==\",\"label\":\"Tutorials\",\"uri\":\"/tutorials/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTU2\",\"label\":\"Blog\",\"uri\":\"/blog\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo0OTcyMA==\",\"label\":\"Open-source Trino\",\"uri\":\"/blog/what-is-trino\",\"parentId\":\"cG9zdDo3OTY0\"}]},{\"id\":\"cG9zdDo3OTYz\",\"label\":\"Get In Touch\",\"uri\":\"#\",\"subItems\":[{\"id\":\"cG9zdDo3OTU4\",\"label\":\"Contact Us\",\"uri\":\"/contact/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDozMDMwNg==\",\"label\":\"Careers\",\"uri\":\"/careers/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDo3OTYx\",\"label\":\"Customer Support\",\"uri\":\"https://starburstsup"])</script><script>self.__next_f.push([1,"port.force.com/s/login/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDoxMzAyNQ==\",\"label\":\"Forum\",\"uri\":\"https://www.trinoforum.org/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDo3OTYw\",\"label\":\"Partner Login\",\"uri\":\"https://partners.starburstdata.com/\",\"parentId\":\"cG9zdDo3OTYz\"}]}]}]\n19:Tf56,"])</script><script>self.__next_f.push([1,"\n window._vwo_code || (function() {\nvar account_id=652006,\nversion=2.1,\nsettings_tolerance=2000,\nhide_element='body',\nhide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;transition:none !important;',\n/* DO NOT EDIT BELOW THIS LINE */\nf=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c\u0026\u0026typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={nonce:v\u0026\u0026v.nonce,use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}v\u0026\u0026t.setAttribute('nonce',v.nonce);d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var n=this.getSettings(),i=d.createElement('script'),r=this;t=t||{};if(n){i.textContent=n;d.getElementsByTagName('head')[0].appendChild(i);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200||o.status===304){w._vwo_code.addScript({text:o.responseText})}else{w._vwo_code.finish('\u0026e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}w._vwo_code.finish('\u0026e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()\u003ee.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')\u003e-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){w._vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var n=this.hide_element(),i=n?n+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v\u0026\u0026t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=i;else t.appendChild(d.createTextNode(i));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var i=d.createElement('div');i.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;display: block !important;';i.setAttribute('id','_vis_opt_path_hides');i.classList.add('_vis_hide_layer');t.parentNode.insertBefore(i,t.nextSibling)}var o=window._vis_opt_url||d.URL,s='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'\u0026u='+encodeURIComponent(o)+'\u0026vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:s})}else{this.load(s+'\u0026x=true')}}};w._vwo_code=code;code.init();})();(function(){var i=window;function t(){if(i._vwo_code){var e=t.hidingStyle=document.getElementById('_vis_opt_path_hides')||t.hidingStyle;if(!i._vwo_code.finished()\u0026\u0026!_vwo_code.libExecuted\u0026\u0026(!i.VWO||!VWO.dNR)){if(!document.getElementById('_vis_opt_path_hides')){document.getElementsByTagName('head')[0].appendChild(e)}requestAnimationFrame(t)}}}t()})();\n"])</script><script>self.__next_f.push([1,"13:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"__variable_592a8c __variable_3f7db5\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L18\",null,{\"id\":\"vwo-setup\",\"strategy\":\"beforeInteractive\",\"children\":\"$19\"}],[\"$\",\"$L18\",null,{\"id\":\"vwo-library\",\"strategy\":\"beforeInteractive\",\"src\":\"https://dev.visualwebsiteoptimizer.com\"}],[\"$\",\"$L18\",null,{\"strategy\":\"afterInteractive\",\"src\":\"https://js.qualified.com/qualified.js\"}]]}],[\"$\",\"$L1a\",null,{\"gtmId\":\"GTM-MRSPFVL\"}],[\"$\",\"body\",null,{\"className\":\"bg-smokeyBlack\",\"data-theme\":\"light\",\"children\":[null,[\"$\",\"$1b\",null,{\"fallback\":null,\"children\":[\"$\",\"$L1c\",null,{\"reason\":\"next/dynamic\",\"children\":[\"$\",\"$L1d\",null,{}]}]}],[\"$\",\"$L1e\",null,{}],[\"$\",\"$Le\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$L1f\",[\"$\",\"main\",null,{\"className\":\"relative z-[1] bg-smokeyBlack\",\"children\":[[\"$\",\"$L20\",null,{\"title\":\"*Page Not Found*,, We're sorry, but the page,, you're looking for doesn't exist,, or has been moved.\",\"textAlignment\":\"left\",\"alignment\":\"left\",\"description\":\"Please check the URL for errors or explore our site using the navigation menu. If you need assistance, feel free to Contact Us.\",\"primaryCta\":{\"title\":\"Go to homepage\",\"url\":\"/\",\"variant\":\"primary\",\"target\":\"_self\"},\"showCtaButtons\":[\"2\"],\"secondaryCta\":{\"title\":\"Contact us\",\"url\":\"/contact\",\"target\":\"_self\"}}],[\"$\",\"div\",null,{\"className\":\"w-full overflow-hidden\",\"children\":[\"$\",\"div\",null,{\"className\":\"container relative mx-auto min-w-[560px] sm:min-w-[860px] md:min-w-[1060px] lg:min-w-[1660px]\",\"children\":[[\"$\",\"img\",null,{\"src\":\"/_next/static/media/circles_top_layer.bc850222.png\",\"alt\":\"\",\"className\":\"absolute left-0 top-0 z-0 mix-blend-overlay\"}],[\"$\",\"img\",null,{\"src\":\"/_next/static/media/circles_bottom_layer.5c4887b7.png\",\"alt\":\"\",\"className\":\"relative left-0 top-0 z-0 \"}]]}]}]]}],\"$L21\"],\"notFoundStyles\":[],\"styles\":null}],[\"$\",\"$1b\",null,{\"fallback\":null,\"children\":[\"$\",\"$L1c\",null,{\"reason\":\"next/dynamic\",\"children\":[\"$\",\"$L22\",null,{}]}]}],[\"$\",\"$1b\",null,{\"fallback\":null,\"children\":[\"$\",\"$L1c\",null,{\"reason\":\"next/dynamic\",\"children\":[\"$\",\"$L23\",null,{}]}]}],[\"$\",\"$L18\",null,{\"src\":\"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js\",\"strategy\":\"afterInteractive\"}],[\"$\",\"$L18\",null,{\"id\":\"ga-expose-id\",\"strategy\":\"afterInteractive\",\"children\":\"window.gaId = \\\"UA-52746336-1\\\";\"}],[\"$\",\"$L24\",null,{\"gaId\":\"UA-52746336-1\"}]]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"$L17\",null,{\"navMenuItems\":[{\"id\":\"cG9zdDo3OTY0\",\"label\":\"Resources\",\"uri\":\"#\",\"subItems\":[{\"id\":\"cG9zdDo3OTUz\",\"label\":\"Resource Library\",\"uri\":\"/resources/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTUy\",\"label\":\"Events and Webinars\",\"uri\":\"/learn/events-webinars/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTU1\",\"label\":\"Documentation\",\"uri\":\"https://docs.starburst.io/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDozNzk5OQ==\",\"label\":\"Tutorials\",\"uri\":\"/tutorials/\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo3OTU2\",\"label\":\"Blog\",\"uri\":\"/blog\",\"parentId\":\"cG9zdDo3OTY0\"},{\"id\":\"cG9zdDo0OTcyMA==\",\"label\":\"Open-source Trino\",\"uri\":\"/blog/what-is-trino\",\"parentId\":\"cG9zdDo3OTY0\"}]},{\"id\":\"cG9zdDo3OTYz\",\"label\":\"Get In Touch\",\"uri\":\"#\",\"subItems\":[{\"id\":\"cG9zdDo3OTU4\",\"label\":\"Contact Us\",\"uri\":\"/contact/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDozMDMwNg==\",\"label\":\"Careers\",\"uri\":\"/careers/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDo3OTYx\",\"label\":\"Customer Support\",\"uri\":\"https://starburstsupport.force.com/s/login/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDoxMzAyNQ==\",\"label\":\"Forum\",\"uri\":\"https://www.trinoforum.org/\",\"parentId\":\"cG9zdDo3OTYz\"},{\"id\":\"cG9zdDo3OTYw\",\"label\":\"Partner Login\",\"uri\":\"https://partners.starburstdata.com/\",\"parentId\":\"cG9zdDo3OTYz\"}]}]}]\n"])</script><script>self.__next_f.push([1,"25:I[82551,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9694\",\"static/chunks/9694-0e03a8f218864453.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"3940\",\"static/chunks/3940-66c9f0077154b71a.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1592\",\"static/chunks/1592-861e30ea675fe617.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2004\",\"static/chunks/2004-c54969ea7b791b60.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2551\",\"static/chunks/2551-25d3d36742795948.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2156\",\"static/chunks/app/(blog)/blog/layout-9a00538124e3a821.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"MainNavigation\"]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"$L25\",null,{\"navMenuItems\":[{\"id\":\"cG9zdDo0NzE3OA==\",\"label\":\"Why Starburst\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzQ3OQ==\",\"label\":\"Comparison\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzE3OA==\",\"description\":\"\",\"cssClasses\":[\"col-span-1\"],\"subItems\":[{\"id\":\"cG9zdDo0ODE3Nw==\",\"label\":\"Why Starburst\",\"uri\":\"/why-starburst\",\"parentId\":\"cG9zdDo0NzQ3OQ==\",\"description\":\"Learn our benefits\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/trophy.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUwNQ==\",\"label\":\"Starburst vs Trino\",\"uri\":\"/starburst-vs-trino\",\"parentId\":\"cG9zdDo0NzQ3OQ==\",\"description\":\"Compare Starburst\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/intersect.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzUwNg==\",\"label\":\"Customers\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzE3OA==\",\"description\":\"\",\"cssClasses\":[\"col-span-2\",\"flex\",\"flex-col\"],\"subItems\":[{\"id\":\"cG9zdDo0NzUwNw==\",\"label\":\"Customers at Starburst\",\"uri\":\"/customers\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Client solutions\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/city-1.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUxMw==\",\"label\":\"Security \u0026 Trust\",\"uri\":\"/about/security\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Data safety focus\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/shield-check.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUwOQ==\",\"label\":\"Customer Stories\",\"uri\":\"/resources?category=case-study\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Success tales\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suggestion.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUxNA==\",\"label\":\"Professional Services\",\"uri\":\"/professional-services\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Expert solutions\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suitcase.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUxMQ==\",\"label\":\"Support\",\"uri\":\"/learn/support\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Get help 24/7\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/support.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUxNQ==\",\"label\":\"Starburst Data Rebels\",\"uri\":\"/customers/starburst-data-rebels\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Empowering innovation\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rebels.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]}],\"cssClasses\":[\"grid\",\"grid-cols-3\"]},{\"id\":\"cG9zdDo0NzUxOQ==\",\"label\":\"Products\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzUyMA==\",\"label\":\"Starburst Galaxy\",\"uri\":\"/starburst-galaxy\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Fully managed lakehouse from data ingestion to data sharing\",\"cssClasses\":[\"flex-1\"],\"subItems\":[]},{\"id\":\"cG9zdDo0NzUyMg==\",\"label\":\"Starburst Enterprise\",\"uri\":\"/starburst-enterprise\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Self-managed lakehouse with 7x more horsepower than OS Trino\",\"cssClasses\":[\"flex-1\"],\"subItems\":[]},{\"id\":\"cG9zdDo0NzUyMQ==\",\"label\":\"Dell Data Lakehouse\",\"uri\":\"/dell\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Modern on-premises storage, SQL engine, and compute for on-prem and hybrid lakehouses\",\"cssClasses\":[\"flex-1\"],\"subItems\":[]}],\"cssClasses\":[\"flex\"]},{\"id\":\"cG9zdDo0NzUyMw==\",\"label\":\"Solutions\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzUyNw==\",\"label\":\"Use cases\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":[\"flex\",\"flex-col\"],\"subItems\":[{\"id\":\"cG9zdDo0NzUyOA==\",\"label\":\"Open Data Lakehouse\",\"uri\":\"/solutions/open-data-lakehouse\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0ODg4Nw==\",\"label\":\"Icehouse Architecture\",\"uri\":\"/platform/icehouse\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzMA==\",\"label\":\"Data Mesh\",\"uri\":\"/info/distributed-data-mesh-resource-center\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzMQ==\",\"label\":\"Artificial Intelligence\",\"uri\":\"/solutions/ai\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzMg==\",\"label\":\"ELT Data Processing\",\"uri\":\"/solutions/elt-data-processing\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzMw==\",\"label\":\"Data Applications\",\"uri\":\"/solutions/data-applications\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzNA==\",\"label\":\"Data Migrations\",\"uri\":\"/solutions/data-migrations\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzNQ==\",\"label\":\"Data Products\",\"uri\":\"/solutions/data-products\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUyOQ==\",\"label\":\"Starburst Enterprise for Government\",\"uri\":\"/federal\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]},{\"id\":\"cG9zdDo0ODQ0NQ==\",\"label\":\"Hadoop Modernization\",\"uri\":\"/solutions/data-migrations/hadoop-modernization\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzUzNg==\",\"label\":\"Industry\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":[\"flex\",\"flex-col\"],\"subItems\":[{\"id\":\"cG9zdDo0NzUzNw==\",\"label\":\"Financial Services\",\"uri\":\"/solutions/industry/financial-services\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Data-driven banking\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/lot-of-cash.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzOA==\",\"label\":\"Healthcare \u0026 Life Sciences\",\"uri\":\"/solutions/industry/healthcare-and-life-sciences\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Innovations in care\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/healthcare.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUzOQ==\",\"label\":\"Retail \u0026 CPG\",\"uri\":\"/solutions/industry/retail-consumer-packaged-goods\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Insights for growth\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/shop.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU0MA==\",\"label\":\"Manufacturing\",\"uri\":\"/platform/starburst-enterprise/\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Smarter production\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/industry.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU0OQ==\",\"label\":\"Partners\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":[\"flex\",\"flex-col\"],\"subItems\":[{\"id\":\"cG9zdDo0ODQ0Ng==\",\"label\":\"Partner Listing\",\"uri\":\"/partner-listing\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Meet Our Partners\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/list.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU1MA==\",\"label\":\"Starburst Orbit\",\"uri\":\"https://accounts.skilljar.com/accounts/login/?t=32rio14maro27\u0026d=2z7ddtjqi09es\u0026next=%2Fauth%2Fendpoint%2Flogin%2Fresult%3Fnext%3D%252F%26d%3D2z7ddtjqi09es\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Learning Portal\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/planet.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0ODg4OA==\",\"label\":\"Become a Partner\",\"uri\":\"/partners/become-a-partner/\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Join our network\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/settings-profiles.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU1Mg==\",\"label\":\"Partner Login\",\"uri\":\"https://partners.starburstdata.com/?__hstc=81614408.a0528845c6a3bab6567bb0ba56ca3b08.1688053347051.1689974773529.1689983551853.46\u0026__hssc=81614408.6.1689983551853\u0026__hsfp=3812163218\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Partner portal access\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/log-in.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU1Mw==\",\"label\":\"Dell\",\"uri\":\"/dell\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Powered by Starburst\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/computer.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]}],\"cssClasses\":[\"flex\"]},{\"id\":\"cG9zdDo0NzUyNA==\",\"label\":\"Pricing\",\"uri\":\"/pricing\",\"description\":\"\",\"subItems\":[],\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzUyNQ==\",\"label\":\"Resources\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzU1Ng==\",\"label\":\"Events\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU1OA==\",\"label\":\"Datanova\",\"uri\":\"/datanova/\",\"parentId\":\"cG9zdDo0NzU1Ng==\",\"description\":\"Shaping the future of data\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/center-align.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU1OQ==\",\"label\":\"Event Calendar\",\"uri\":\"/learn/events-webinars\",\"parentId\":\"cG9zdDo0NzU1Ng==\",\"description\":\"Upcoming gatherings\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/calendar.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU2MA==\",\"label\":\"Connect\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU2Mg==\",\"label\":\"Community\",\"uri\":\"/community/\",\"parentId\":\"cG9zdDo0NzU2MA==\",\"description\":\"Connect and share\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/group.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU2MQ==\",\"label\":\"Forum\",\"uri\":\"https://www.starburst.io/community/forum/\",\"parentId\":\"cG9zdDo0NzU2MA==\",\"description\":\"Discuss and discover\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-bubble.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU2Mw==\",\"label\":\"Documentation\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU2NA==\",\"label\":\"Technical Overview\",\"uri\":\"https://docs.starburst.io/\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"Helpful materials\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/tools.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU2NQ==\",\"label\":\"Starburst Galaxy\",\"uri\":\"https://docs.starburst.io/starburst-galaxy/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"User guides\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/cloud.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU2Ng==\",\"label\":\"Starburst Enterprise\",\"uri\":\"https://docs.starburst.io/latest/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"User guides\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/database.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU2Nw==\",\"label\":\"Clients\",\"uri\":\"https://docs.starburst.io/clients/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"Trusted partnerships\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/star.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU2OA==\",\"label\":\"Blog, Guides \u0026 Webinars\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU2OQ==\",\"label\":\"Blog\",\"uri\":\"/blog\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Insights and updates\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/white-flag.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU3MA==\",\"label\":\"Data Glossary\",\"uri\":\"/data-glossary\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Data definitions\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-window.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU3MQ==\",\"label\":\"Resources\",\"uri\":\"/resources\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Guides and tools\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/google-docs.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU3Mg==\",\"label\":\"Training \u0026 Certification\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU3Mw==\",\"label\":\"Starburst Academy\",\"uri\":\"https://academy.starburst.io/\",\"parentId\":\"cG9zdDo0NzU3Mg==\",\"description\":\"Training and courses\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/graduation-cap.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU3NA==\",\"label\":\"Tutorials\",\"uri\":\"/tutorials\",\"parentId\":\"cG9zdDo0NzU3Mg==\",\"description\":\"Step-by-step guides\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/media-video.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]}],\"cssClasses\":[\"flex\",\"flex-col\",\"flex-wrap\"]},{\"id\":\"cG9zdDo0NzUyNg==\",\"label\":\"About\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzU3NQ==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU3Ng==\",\"label\":\"Company\",\"uri\":\"/about\",\"parentId\":\"cG9zdDo0NzU3NQ==\",\"description\":\"About us\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/sparks.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU3Nw==\",\"label\":\"Careers\",\"uri\":\"/careers\",\"parentId\":\"cG9zdDo0NzU3NQ==\",\"description\":\"Join our team\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rocket.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU3OA==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU4MA==\",\"label\":\"Newsroom\",\"uri\":\"/about/newsroom\",\"parentId\":\"cG9zdDo0NzU3OA==\",\"description\":\"News and events\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rss-feed.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzU4MQ==\",\"label\":\"Contact Us\",\"uri\":\"/contact\",\"parentId\":\"cG9zdDo0NzU3OA==\",\"description\":\"Get in touch\",\"icon\":{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/chat-lines.svg\",\"__typename\":\"MediaItem\"},\"cssClasses\":[]}]},{\"id\":\"cG9zdDo0NzU3OQ==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":[],\"subItems\":[{\"id\":\"cG9zdDo0NzU4Mg==\",\"label\":\"Starburst’s mission is to free our customers to see the invisible and achieve the impossible\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzU3OQ==\",\"description\":\"\",\"icon\":null,\"cssClasses\":[\"text\"]}]}],\"cssClasses\":[\"flex\"]},{\"id\":\"cG9zdDo0NzE3Nw==\",\"label\":\"\u003cdiv data-open=\\\"searchModal\\\" class=\\\"main-nav-search-item\\\"\u003e\u003cimg style=\\\"width:16px;height:16px;margin:0;\\\" src=\\\"https://live-starburst.pantheonsite.io/wp-content/uploads/2022/09/icon_search.png\\\" alt=\\\"Search\\\" /\u003e\u003c/div\u003e\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[],\"cssClasses\":[\"search\"]},{\"id\":\"cG9zdDo0NzE3Ng==\",\"label\":\"Contact Us\",\"uri\":\"/contact/\",\"description\":\"\",\"subItems\":[],\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzE3NQ==\",\"label\":\"Login\",\"uri\":\"https://galaxy.starburst.io/login\",\"description\":\"\",\"subItems\":[],\"cssClasses\":[]},{\"id\":\"cG9zdDo0NzM0NQ==\",\"label\":\"Start Free\",\"uri\":\"/free-trial/\",\"description\":\"\",\"subItems\":[],\"cssClasses\":[]}]}]\n"])</script><script>self.__next_f.push([1,"26:[\"col-span-1\"]\n27:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/trophy.svg\",\"__typename\":\"MediaItem\"}\n28:[]\n29:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/intersect.svg\",\"__typename\":\"MediaItem\"}\n2a:[]\n2b:[\"col-span-2\",\"flex\",\"flex-col\"]\n2c:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/city-1.svg\",\"__typename\":\"MediaItem\"}\n2d:[]\n2e:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/shield-check.svg\",\"__typename\":\"MediaItem\"}\n2f:[]\n30:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suggestion.svg\",\"__typename\":\"MediaItem\"}\n31:[]\n32:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/suitcase.svg\",\"__typename\":\"MediaItem\"}\n33:[]\n34:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/support.svg\",\"__typename\":\"MediaItem\"}\n35:[]\n36:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rebels.svg\",\"__typename\":\"MediaItem\"}\n37:[]\n38:[\"grid\",\"grid-cols-3\"]\n39:[\"flex-1\"]\n3a:[\"flex-1\"]\n3b:[\"flex-1\"]\n3c:[\"flex\"]\n3d:[\"flex\",\"flex-col\"]\n3e:[]\n3f:[]\n40:[]\n41:[]\n42:[]\n43:[]\n44:[]\n45:[]\n46:[]\n47:[]\n48:[\"flex\",\"flex-col\"]\n49:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/lot-of-cash.svg\",\"__typename\":\"MediaItem\"}\n4a:[]\n4b:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/healthcare.svg\",\"__typename\":\"MediaItem\"}\n4c:[]\n4d:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/shop.svg\",\"__typename\":\"MediaItem\"}\n4e:[]\n4f:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/industry.svg\",\"__typename\":\"MediaItem\"}\n50:[]\n51:[\"flex\",\"flex-col\"]\n52:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/12/list.svg\",\"__typename\":\"MediaItem\"}\n53:[]\n54:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/up"])</script><script>self.__next_f.push([1,"loads/2024/11/planet.svg\",\"__typename\":\"MediaItem\"}\n55:[]\n56:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/settings-profiles.svg\",\"__typename\":\"MediaItem\"}\n57:[]\n58:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/log-in.svg\",\"__typename\":\"MediaItem\"}\n59:[]\n5a:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/computer.svg\",\"__typename\":\"MediaItem\"}\n5b:[]\n5c:[\"flex\"]\n5d:[]\n5e:[]\n5f:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/center-align.svg\",\"__typename\":\"MediaItem\"}\n60:[]\n61:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/calendar.svg\",\"__typename\":\"MediaItem\"}\n62:[]\n63:[]\n64:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/group.svg\",\"__typename\":\"MediaItem\"}\n65:[]\n66:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-bubble.svg\",\"__typename\":\"MediaItem\"}\n67:[]\n68:[]\n69:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/tools.svg\",\"__typename\":\"MediaItem\"}\n6a:[]\n6b:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/cloud.svg\",\"__typename\":\"MediaItem\"}\n6c:[]\n6d:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/database.svg\",\"__typename\":\"MediaItem\"}\n6e:[]\n6f:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/star.svg\",\"__typename\":\"MediaItem\"}\n70:[]\n71:[]\n72:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/white-flag.svg\",\"__typename\":\"MediaItem\"}\n73:[]\n74:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/multi-window.svg\",\"__typename\":\"MediaItem\"}\n75:[]\n76:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/google-docs.svg\",\"__typename\":\"MediaItem\"}\n77:[]\n78:[]\n79:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/"])</script><script>self.__next_f.push([1,"11/graduation-cap.svg\",\"__typename\":\"MediaItem\"}\n7a:[]\n7b:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/media-video.svg\",\"__typename\":\"MediaItem\"}\n7c:[]\n7d:[\"flex\",\"flex-col\",\"flex-wrap\"]\n7e:[]\n7f:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/sparks.svg\",\"__typename\":\"MediaItem\"}\n80:[]\n81:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rocket.svg\",\"__typename\":\"MediaItem\"}\n82:[]\n83:[]\n84:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/rss-feed.svg\",\"__typename\":\"MediaItem\"}\n85:[]\n86:{\"mediaItemUrl\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2024/11/chat-lines.svg\",\"__typename\":\"MediaItem\"}\n87:[]\n88:[]\n89:[\"text\"]\n8a:[\"flex\"]\n8b:[\"search\"]\n8c:[]\n8d:[]\n8e:[]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"$L25\",null,{\"navMenuItems\":[{\"id\":\"cG9zdDo0NzE3OA==\",\"label\":\"Why Starburst\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzQ3OQ==\",\"label\":\"Comparison\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzE3OA==\",\"description\":\"\",\"cssClasses\":\"$26\",\"subItems\":[{\"id\":\"cG9zdDo0ODE3Nw==\",\"label\":\"Why Starburst\",\"uri\":\"/why-starburst\",\"parentId\":\"cG9zdDo0NzQ3OQ==\",\"description\":\"Learn our benefits\",\"icon\":\"$27\",\"cssClasses\":\"$28\"},{\"id\":\"cG9zdDo0NzUwNQ==\",\"label\":\"Starburst vs Trino\",\"uri\":\"/starburst-vs-trino\",\"parentId\":\"cG9zdDo0NzQ3OQ==\",\"description\":\"Compare Starburst\",\"icon\":\"$29\",\"cssClasses\":\"$2a\"}]},{\"id\":\"cG9zdDo0NzUwNg==\",\"label\":\"Customers\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzE3OA==\",\"description\":\"\",\"cssClasses\":\"$2b\",\"subItems\":[{\"id\":\"cG9zdDo0NzUwNw==\",\"label\":\"Customers at Starburst\",\"uri\":\"/customers\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Client solutions\",\"icon\":\"$2c\",\"cssClasses\":\"$2d\"},{\"id\":\"cG9zdDo0NzUxMw==\",\"label\":\"Security \u0026 Trust\",\"uri\":\"/about/security\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Data safety focus\",\"icon\":\"$2e\",\"cssClasses\":\"$2f\"},{\"id\":\"cG9zdDo0NzUwOQ==\",\"label\":\"Customer Stories\",\"uri\":\"/resources?category=case-study\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Success tales\",\"icon\":\"$30\",\"cssClasses\":\"$31\"},{\"id\":\"cG9zdDo0NzUxNA==\",\"label\":\"Professional Services\",\"uri\":\"/professional-services\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Expert solutions\",\"icon\":\"$32\",\"cssClasses\":\"$33\"},{\"id\":\"cG9zdDo0NzUxMQ==\",\"label\":\"Support\",\"uri\":\"/learn/support\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Get help 24/7\",\"icon\":\"$34\",\"cssClasses\":\"$35\"},{\"id\":\"cG9zdDo0NzUxNQ==\",\"label\":\"Starburst Data Rebels\",\"uri\":\"/customers/starburst-data-rebels\",\"parentId\":\"cG9zdDo0NzUwNg==\",\"description\":\"Empowering innovation\",\"icon\":\"$36\",\"cssClasses\":\"$37\"}]}],\"cssClasses\":\"$38\"},{\"id\":\"cG9zdDo0NzUxOQ==\",\"label\":\"Products\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzUyMA==\",\"label\":\"Starburst Galaxy\",\"uri\":\"/starburst-galaxy\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Fully managed lakehouse from data ingestion to data sharing\",\"cssClasses\":\"$39\",\"subItems\":[]},{\"id\":\"cG9zdDo0NzUyMg==\",\"label\":\"Starburst Enterprise\",\"uri\":\"/starburst-enterprise\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Self-managed lakehouse with 7x more horsepower than OS Trino\",\"cssClasses\":\"$3a\",\"subItems\":[]},{\"id\":\"cG9zdDo0NzUyMQ==\",\"label\":\"Dell Data Lakehouse\",\"uri\":\"/dell\",\"parentId\":\"cG9zdDo0NzUxOQ==\",\"description\":\"Modern on-premises storage, SQL engine, and compute for on-prem and hybrid lakehouses\",\"cssClasses\":\"$3b\",\"subItems\":[]}],\"cssClasses\":\"$3c\"},{\"id\":\"cG9zdDo0NzUyMw==\",\"label\":\"Solutions\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzUyNw==\",\"label\":\"Use cases\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":\"$3d\",\"subItems\":[{\"id\":\"cG9zdDo0NzUyOA==\",\"label\":\"Open Data Lakehouse\",\"uri\":\"/solutions/open-data-lakehouse\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$3e\"},{\"id\":\"cG9zdDo0ODg4Nw==\",\"label\":\"Icehouse Architecture\",\"uri\":\"/platform/icehouse\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$3f\"},{\"id\":\"cG9zdDo0NzUzMA==\",\"label\":\"Data Mesh\",\"uri\":\"/info/distributed-data-mesh-resource-center\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$40\"},{\"id\":\"cG9zdDo0NzUzMQ==\",\"label\":\"Artificial Intelligence\",\"uri\":\"/solutions/ai\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$41\"},{\"id\":\"cG9zdDo0NzUzMg==\",\"label\":\"ELT Data Processing\",\"uri\":\"/solutions/elt-data-processing\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$42\"},{\"id\":\"cG9zdDo0NzUzMw==\",\"label\":\"Data Applications\",\"uri\":\"/solutions/data-applications\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$43\"},{\"id\":\"cG9zdDo0NzUzNA==\",\"label\":\"Data Migrations\",\"uri\":\"/solutions/data-migrations\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$44\"},{\"id\":\"cG9zdDo0NzUzNQ==\",\"label\":\"Data Products\",\"uri\":\"/solutions/data-products\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$45\"},{\"id\":\"cG9zdDo0NzUyOQ==\",\"label\":\"Starburst Enterprise for Government\",\"uri\":\"/federal\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$46\"},{\"id\":\"cG9zdDo0ODQ0NQ==\",\"label\":\"Hadoop Modernization\",\"uri\":\"/solutions/data-migrations/hadoop-modernization\",\"parentId\":\"cG9zdDo0NzUyNw==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$47\"}]},{\"id\":\"cG9zdDo0NzUzNg==\",\"label\":\"Industry\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":\"$48\",\"subItems\":[{\"id\":\"cG9zdDo0NzUzNw==\",\"label\":\"Financial Services\",\"uri\":\"/solutions/industry/financial-services\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Data-driven banking\",\"icon\":\"$49\",\"cssClasses\":\"$4a\"},{\"id\":\"cG9zdDo0NzUzOA==\",\"label\":\"Healthcare \u0026 Life Sciences\",\"uri\":\"/solutions/industry/healthcare-and-life-sciences\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Innovations in care\",\"icon\":\"$4b\",\"cssClasses\":\"$4c\"},{\"id\":\"cG9zdDo0NzUzOQ==\",\"label\":\"Retail \u0026 CPG\",\"uri\":\"/solutions/industry/retail-consumer-packaged-goods\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Insights for growth\",\"icon\":\"$4d\",\"cssClasses\":\"$4e\"},{\"id\":\"cG9zdDo0NzU0MA==\",\"label\":\"Manufacturing\",\"uri\":\"/platform/starburst-enterprise/\",\"parentId\":\"cG9zdDo0NzUzNg==\",\"description\":\"Smarter production\",\"icon\":\"$4f\",\"cssClasses\":\"$50\"}]},{\"id\":\"cG9zdDo0NzU0OQ==\",\"label\":\"Partners\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyMw==\",\"description\":\"\",\"cssClasses\":\"$51\",\"subItems\":[{\"id\":\"cG9zdDo0ODQ0Ng==\",\"label\":\"Partner Listing\",\"uri\":\"/partner-listing\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Meet Our Partners\",\"icon\":\"$52\",\"cssClasses\":\"$53\"},{\"id\":\"cG9zdDo0NzU1MA==\",\"label\":\"Starburst Orbit\",\"uri\":\"https://accounts.skilljar.com/accounts/login/?t=32rio14maro27\u0026d=2z7ddtjqi09es\u0026next=%2Fauth%2Fendpoint%2Flogin%2Fresult%3Fnext%3D%252F%26d%3D2z7ddtjqi09es\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Learning Portal\",\"icon\":\"$54\",\"cssClasses\":\"$55\"},{\"id\":\"cG9zdDo0ODg4OA==\",\"label\":\"Become a Partner\",\"uri\":\"/partners/become-a-partner/\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Join our network\",\"icon\":\"$56\",\"cssClasses\":\"$57\"},{\"id\":\"cG9zdDo0NzU1Mg==\",\"label\":\"Partner Login\",\"uri\":\"https://partners.starburstdata.com/?__hstc=81614408.a0528845c6a3bab6567bb0ba56ca3b08.1688053347051.1689974773529.1689983551853.46\u0026__hssc=81614408.6.1689983551853\u0026__hsfp=3812163218\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Partner portal access\",\"icon\":\"$58\",\"cssClasses\":\"$59\"},{\"id\":\"cG9zdDo0NzU1Mw==\",\"label\":\"Dell\",\"uri\":\"/dell\",\"parentId\":\"cG9zdDo0NzU0OQ==\",\"description\":\"Powered by Starburst\",\"icon\":\"$5a\",\"cssClasses\":\"$5b\"}]}],\"cssClasses\":\"$5c\"},{\"id\":\"cG9zdDo0NzUyNA==\",\"label\":\"Pricing\",\"uri\":\"/pricing\",\"description\":\"\",\"subItems\":[],\"cssClasses\":\"$5d\"},{\"id\":\"cG9zdDo0NzUyNQ==\",\"label\":\"Resources\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzU1Ng==\",\"label\":\"Events\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":\"$5e\",\"subItems\":[{\"id\":\"cG9zdDo0NzU1OA==\",\"label\":\"Datanova\",\"uri\":\"/datanova/\",\"parentId\":\"cG9zdDo0NzU1Ng==\",\"description\":\"Shaping the future of data\",\"icon\":\"$5f\",\"cssClasses\":\"$60\"},{\"id\":\"cG9zdDo0NzU1OQ==\",\"label\":\"Event Calendar\",\"uri\":\"/learn/events-webinars\",\"parentId\":\"cG9zdDo0NzU1Ng==\",\"description\":\"Upcoming gatherings\",\"icon\":\"$61\",\"cssClasses\":\"$62\"}]},{\"id\":\"cG9zdDo0NzU2MA==\",\"label\":\"Connect\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":\"$63\",\"subItems\":[{\"id\":\"cG9zdDo0NzU2Mg==\",\"label\":\"Community\",\"uri\":\"/community/\",\"parentId\":\"cG9zdDo0NzU2MA==\",\"description\":\"Connect and share\",\"icon\":\"$64\",\"cssClasses\":\"$65\"},{\"id\":\"cG9zdDo0NzU2MQ==\",\"label\":\"Forum\",\"uri\":\"https://www.starburst.io/community/forum/\",\"parentId\":\"cG9zdDo0NzU2MA==\",\"description\":\"Discuss and discover\",\"icon\":\"$66\",\"cssClasses\":\"$67\"}]},{\"id\":\"cG9zdDo0NzU2Mw==\",\"label\":\"Documentation\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":\"$68\",\"subItems\":[{\"id\":\"cG9zdDo0NzU2NA==\",\"label\":\"Technical Overview\",\"uri\":\"https://docs.starburst.io/\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"Helpful materials\",\"icon\":\"$69\",\"cssClasses\":\"$6a\"},{\"id\":\"cG9zdDo0NzU2NQ==\",\"label\":\"Starburst Galaxy\",\"uri\":\"https://docs.starburst.io/starburst-galaxy/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"User guides\",\"icon\":\"$6b\",\"cssClasses\":\"$6c\"},{\"id\":\"cG9zdDo0NzU2Ng==\",\"label\":\"Starburst Enterprise\",\"uri\":\"https://docs.starburst.io/latest/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"User guides\",\"icon\":\"$6d\",\"cssClasses\":\"$6e\"},{\"id\":\"cG9zdDo0NzU2Nw==\",\"label\":\"Clients\",\"uri\":\"https://docs.starburst.io/clients/index.html\",\"parentId\":\"cG9zdDo0NzU2Mw==\",\"description\":\"Trusted partnerships\",\"icon\":\"$6f\",\"cssClasses\":\"$70\"}]},{\"id\":\"cG9zdDo0NzU2OA==\",\"label\":\"Blog, Guides \u0026 Webinars\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":\"$71\",\"subItems\":[{\"id\":\"cG9zdDo0NzU2OQ==\",\"label\":\"Blog\",\"uri\":\"/blog\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Insights and updates\",\"icon\":\"$72\",\"cssClasses\":\"$73\"},{\"id\":\"cG9zdDo0NzU3MA==\",\"label\":\"Data Glossary\",\"uri\":\"/data-glossary\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Data definitions\",\"icon\":\"$74\",\"cssClasses\":\"$75\"},{\"id\":\"cG9zdDo0NzU3MQ==\",\"label\":\"Resources\",\"uri\":\"/resources\",\"parentId\":\"cG9zdDo0NzU2OA==\",\"description\":\"Guides and tools\",\"icon\":\"$76\",\"cssClasses\":\"$77\"}]},{\"id\":\"cG9zdDo0NzU3Mg==\",\"label\":\"Training \u0026 Certification\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNQ==\",\"description\":\"\",\"cssClasses\":\"$78\",\"subItems\":[{\"id\":\"cG9zdDo0NzU3Mw==\",\"label\":\"Starburst Academy\",\"uri\":\"https://academy.starburst.io/\",\"parentId\":\"cG9zdDo0NzU3Mg==\",\"description\":\"Training and courses\",\"icon\":\"$79\",\"cssClasses\":\"$7a\"},{\"id\":\"cG9zdDo0NzU3NA==\",\"label\":\"Tutorials\",\"uri\":\"/tutorials\",\"parentId\":\"cG9zdDo0NzU3Mg==\",\"description\":\"Step-by-step guides\",\"icon\":\"$7b\",\"cssClasses\":\"$7c\"}]}],\"cssClasses\":\"$7d\"},{\"id\":\"cG9zdDo0NzUyNg==\",\"label\":\"About\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[{\"id\":\"cG9zdDo0NzU3NQ==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":\"$7e\",\"subItems\":[{\"id\":\"cG9zdDo0NzU3Ng==\",\"label\":\"Company\",\"uri\":\"/about\",\"parentId\":\"cG9zdDo0NzU3NQ==\",\"description\":\"About us\",\"icon\":\"$7f\",\"cssClasses\":\"$80\"},{\"id\":\"cG9zdDo0NzU3Nw==\",\"label\":\"Careers\",\"uri\":\"/careers\",\"parentId\":\"cG9zdDo0NzU3NQ==\",\"description\":\"Join our team\",\"icon\":\"$81\",\"cssClasses\":\"$82\"}]},{\"id\":\"cG9zdDo0NzU3OA==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":\"$83\",\"subItems\":[{\"id\":\"cG9zdDo0NzU4MA==\",\"label\":\"Newsroom\",\"uri\":\"/about/newsroom\",\"parentId\":\"cG9zdDo0NzU3OA==\",\"description\":\"News and events\",\"icon\":\"$84\",\"cssClasses\":\"$85\"},{\"id\":\"cG9zdDo0NzU4MQ==\",\"label\":\"Contact Us\",\"uri\":\"/contact\",\"parentId\":\"cG9zdDo0NzU3OA==\",\"description\":\"Get in touch\",\"icon\":\"$86\",\"cssClasses\":\"$87\"}]},{\"id\":\"cG9zdDo0NzU3OQ==\",\"label\":\"Menu Item\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzUyNg==\",\"description\":\"\",\"cssClasses\":\"$88\",\"subItems\":[{\"id\":\"cG9zdDo0NzU4Mg==\",\"label\":\"Starburst’s mission is to free our customers to see the invisible and achieve the impossible\",\"uri\":\"#\",\"parentId\":\"cG9zdDo0NzU3OQ==\",\"description\":\"\",\"icon\":null,\"cssClasses\":\"$89\"}]}],\"cssClasses\":\"$8a\"},{\"id\":\"cG9zdDo0NzE3Nw==\",\"label\":\"\u003cdiv data-open=\\\"searchModal\\\" class=\\\"main-nav-search-item\\\"\u003e\u003cimg style=\\\"width:16px;height:16px;margin:0;\\\" src=\\\"https://live-starburst.pantheonsite.io/wp-content/uploads/2022/09/icon_search.png\\\" alt=\\\"Search\\\" /\u003e\u003c/div\u003e\",\"uri\":\"#\",\"description\":\"\",\"subItems\":[],\"cssClasses\":\"$8b\"},{\"id\":\"cG9zdDo0NzE3Ng==\",\"label\":\"Contact Us\",\"uri\":\"/contact/\",\"description\":\"\",\"subItems\":[],\"cssClasses\":\"$8c\"},{\"id\":\"cG9zdDo0NzE3NQ==\",\"label\":\"Login\",\"uri\":\"https://galaxy.starburst.io/login\",\"description\":\"\",\"subItems\":[],\"cssClasses\":\"$8d\"},{\"id\":\"cG9zdDo0NzM0NQ==\",\"label\":\"Start Free\",\"uri\":\"/free-trial/\",\"description\":\"\",\"subItems\":[],\"cssClasses\":\"$8e\"}]}]\n"])</script><script>self.__next_f.push([1,"8f:I[7617,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1928\",\"static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2104\",\"static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5030\",\"static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9126\",\"static/chunks/app/(blog)/blog/%5B...uri%5D/page-e2f886e2b299a8ca.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"ImageWithFallback\"]\n90:I[38173,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1928\",\"static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2104\",\"static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5030\",\"static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9126\",\"static/chunks/app/(blog)/blog/%5B...uri%5D/page-e2f886e2b299a8ca.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"Image\"]\n91:I[27429,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1928\",\"static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2104\",\"static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5030\",\"static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8"])</script><script>self.__next_f.push([1,"p84gwf9F5mZSQhNjs5ZvNRve\",\"9126\",\"static/chunks/app/(blog)/blog/%5B...uri%5D/page-e2f886e2b299a8ca.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"default\"]\n92:I[231,[\"9009\",\"static/chunks/9009-0cd892eb381ef39f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"8173\",\"static/chunks/8173-30cb3bf179be30fe.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"231\",\"static/chunks/231-8dcfbd28a90c5d8c.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"1928\",\"static/chunks/1928-1e98ebc6d71bc41f.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2792\",\"static/chunks/2792-fa16fa83e234844b.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"2104\",\"static/chunks/2104-6224d840753b6403.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"5030\",\"static/chunks/5030-951b5accc56f67a6.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\",\"9126\",\"static/chunks/app/(blog)/blog/%5B...uri%5D/page-e2f886e2b299a8ca.js?dpl=dpl_A1g8p84gwf9F5mZSQhNjs5ZvNRve\"],\"\"]\n93:Tda70,"])</script><script>self.__next_f.push([1,"\u003cp\u003e\u003cem\u003eThis is part 6 of the Bleeding edge Java series. \u003ca href=\"https://www.starburst.io/blog/2022-09-20-bej0-introduction.html\"\u003eStart at the introduction\u003c/a\u003e if you haven’t already.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIn the first part of the deserialization article we defined a framework for deserializing simple Java types. Now we add support for complex types.\u003c/p\u003e\n\u003cp\u003eFirst we update the implementation of \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edeserializerFor\u003c/code\u003e to include the complex types we handle:\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003edeserializerFor\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eType\u003c/span\u003e \u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nf\"\u003eswitch\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003ebyte\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eByte\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003ebyteValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eshort\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eShort\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003eshortValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eInteger\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003eintValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003elong\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eLong\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003elongValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003efloat\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eFloat\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003efloatValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003edouble\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eDouble\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003enumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003edoubleValue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eBoolean\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eBooleanToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nl\"\u003eBooleanToken:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumber\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisAssignableFrom\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eNumberToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nl\"\u003eNumberToken:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eString\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eStringToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nl\"\u003eStringToken:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eParameterizedType\u003c/span\u003e \u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e \u003cspan class=\"nf\"\u003ewhen\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetRawType\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"k\"\u003einstanceof\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nc\"\u003eCollection\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisAssignableFrom\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003ecollectionTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetActualTypeArguments\u003c/span\u003e\u003cspan class=\"o\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e]);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eParameterizedType\u003c/span\u003e \u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e \u003cspan class=\"nf\"\u003ewhen\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetRawType\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"k\"\u003einstanceof\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nc\"\u003eOptional\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisAssignableFrom\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003eoptionalTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eparameterizedType\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetActualTypeArguments\u003c/span\u003e\u003cspan class=\"o\"\u003e()[\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e]);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisRecord\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003erecordTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e \u003cspan class=\"n\"\u003ewhen\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisEnum\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \r\n \u003cspan class=\"n\"\u003eenumTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eclazz\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003edefault\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e};\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch3 id=\"enumerations\"\u003eEnumerations\u003c/h3\u003e\n\u003cp\u003eUse simpleTypedDeserializer to accept a string and use the string to build the enum.\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003eenumTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eenumClass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nf\"\u003esimpleTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eStringToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003estringToken\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eStream\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eof\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eenumClass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetEnumConstants\u003c/span\u003e\u003cspan class=\"o\"\u003e()).\u003c/span\u003e\u003cspan class=\"na\"\u003efilter\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ec\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ec\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003etoString\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estringToken\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e())).\u003c/span\u003e\u003cspan class=\"na\"\u003efindFirst\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003eorElseThrow\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eRuntimeException:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"k\"\u003enew\u003c/span\u003e\u003cspan class=\"o\"\u003e));\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch3 id=\"optional\"\u003eOptional\u003c/h3\u003e\n\u003cp\u003eThe pattern matching in the \u003ccode class=\"language-plaintext highlighter-rouge\"\u003edeserializerFor()\u003c/code\u003e switch will have extracted the Optional’s component type. We get the deserializer for that component type, get its value and then pass that value through \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eOptional.ofNullable()\u003c/code\u003e.\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003eoptionalTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eType\u003c/span\u003e \u003cspan class=\"n\"\u003ecomponentType\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kd\"\u003efinal\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003evalueDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializerFor\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecomponentType\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eJsonToken\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003evalueDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eObject\u003c/span\u003e \u003cspan class=\"nf\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nc\"\u003eOptional\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eofNullable\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalueDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e};\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch3 id=\"collections\"\u003eCollections\u003c/h3\u003e\n\u003cp\u003eFor collections we keep a list of a deserializers for each value in the collection. When the parent deserializer asks for the collection value, we can then process each deserializer to get its final value. We must perform this delayed value resolution because all the tokens that apply to the collection must be processed before the value can be determined.\u003c/p\u003e\n\u003cp\u003eThe deserializer does the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWait for the BeginArrayToken to mark that the collection has started\u003c/li\u003e\n\u003cli\u003eSet a flag to indicate that a value is expected once the collection has started\u003c/li\u003e\n\u003cli\u003eCheck the next token to see if it’s an EndArrayToken when the value-expected flag is set\n\u003cul\u003e\n\u003cli\u003eIf so, the collection is complete\u003c/li\u003e\n\u003cli\u003eIf not, get a new deserializer for the list’s component type and add it to values and set it as the next deserializer\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eIf a ValueSeparatorToken is accepted, reset for a new value\u003c/li\u003e\n\u003cli\u003eOtherwise wait for EndArrayToken\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003ecollectionTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003ecollectionClass\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eType\u003c/span\u003e \u003cspan class=\"n\"\u003ecomponentType\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kd\"\u003efinal\u003c/span\u003e \u003cspan class=\"nc\"\u003eList\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003evalues\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eArrayList\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026gt;();\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e \u003cspan class=\"n\"\u003estarted\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e \u003cspan class=\"n\"\u003eexpectingValue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eJsonToken\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003ethis\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eexpectingValue\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eexpectingValue\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eEndArrayToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e \u003cspan class=\"c1\"\u003e// it's an empty array\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003edefault\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializerFor\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003ethis\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003ecomponentType\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003evalues\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eadd\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eBeginArrayToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eexpectingValue\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eEndArrayToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eValueSeparatorToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eexpectingValue\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003edefault\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eObject\u003c/span\u003e \u003cspan class=\"nf\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"c1\"\u003e// get the final value from each of the stored deserializers\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eStream\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eObject\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003evalueStream\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003evalues\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003estream\u003c/span\u003e\u003cspan class=\"o\"\u003e().\u003c/span\u003e\u003cspan class=\"na\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eTypedDeserializer:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"c1\"\u003e// create either a set or a list depending on the collection class\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"nc\"\u003eSet\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisAssignableFrom\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecollectionClass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e?\u003c/span\u003e \u003cspan class=\"n\"\u003evalueStream\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003ecollect\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eCollectors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003etoSet\u003c/span\u003e\u003cspan class=\"o\"\u003e())\u003c/span\u003e \u003cspan class=\"o\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003evalueStream\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003etoList\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e};\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch3 id=\"records\"\u003eRecords\u003c/h3\u003e\n\u003cp\u003eFor records we use the record’s array of RecordComponents to know the names and types of the fields to expect in the object. Similar to the collection deserializer we keep a map whose key is the name of the field and the value is the deserializer for the component’s type. Just like for collections, when the parent deserializer asks for the record value, we can then process each deserializer to get its final value. We must perform this delayed value resolution because all the tokens that apply to the record must be processed before the value can be determined.\u003c/p\u003e\n\u003cp\u003eThe deserializer does the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWait for BeginObjectToken to mark that the object has started\u003c/li\u003e\n\u003cli\u003eExpect that ObjectNameToken is the next token. Once the ObjectNameToken is accepted:\n\u003cul\u003e\n\u003cli\u003eGet a new deserializer for the record component’s type and add it to values map\u003c/li\u003e\n\u003cli\u003eSet it as the next deserializer\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eIf a ValueSeparatorToken is accepted, reset for another BeginObjectToken, otherwise, wait for EndObjectToken\u003c/li\u003e\n\u003cli\u003eBuild the final value by using the RecordComponents to find the canonical Constructor, create an array of values and create the record via reflection\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003erecordTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003erecordClass\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eRecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e[]\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erecordClass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetRecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eMap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eString\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eRecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponentMap\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eStream\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eof\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e).\u003c/span\u003e\u003cspan class=\"na\"\u003ecollect\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eCollectors\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003etoMap\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eRecordComponent:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003egetName\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eFunction\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eidentity\u003c/span\u003e\u003cspan class=\"o\"\u003e()));\u003c/span\u003e\r\n\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kd\"\u003efinal\u003c/span\u003e \u003cspan class=\"nc\"\u003eMap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eString\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003evaluesMap\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eHashMap\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026gt;();\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"nc\"\u003eString\u003c/span\u003e \u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e \u003cspan class=\"n\"\u003estarted\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kt\"\u003eboolean\u003c/span\u003e \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"nf\"\u003eaccept\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eJsonToken\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003ethis\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eswitch\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonToken\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eBeginObjectToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nf\"\u003eObjectNameToken\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e \u003cspan class=\"o\"\u003e!=\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eRecordComponent\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponentMap\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eget\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003etypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializerFor\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003ethis\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetGenericType\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003evaluesMap\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eput\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003etypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eEndObjectToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparentTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eisDone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecase\u003c/span\u003e \u003cspan class=\"nc\"\u003eValueSeparatorToken\u003c/span\u003e \u003cspan class=\"n\"\u003e__\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003estarted\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003ecurrentName\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003edefault\u003c/span\u003e \u003cspan class=\"o\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003enextTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n\r\n \u003cspan class=\"nd\"\u003e@Override\u003c/span\u003e\r\n \u003cspan class=\"kd\"\u003epublic\u003c/span\u003e \u003cspan class=\"nc\"\u003eObject\u003c/span\u003e \u003cspan class=\"nf\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e()\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(!\u003c/span\u003e\u003cspan class=\"n\"\u003eisDone\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;?\u0026gt;[]\u003c/span\u003e \u003cspan class=\"n\"\u003eargumentTypes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eClass\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e];\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eObject\u003c/span\u003e\u003cspan class=\"o\"\u003e[]\u003c/span\u003e \u003cspan class=\"n\"\u003earguments\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eObject\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e];\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003efor\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e \u003cspan class=\"n\"\u003ei\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003elength\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e \u003cspan class=\"o\"\u003e++\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eRecordComponent\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponents\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e];\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003eargumentTypes\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetType\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eTypedDeserializer\u003c/span\u003e \u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003evaluesMap\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eget\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetName\u003c/span\u003e\u003cspan class=\"o\"\u003e());\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"kc\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eOptional\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eisAssignableFrom\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003erecordComponent\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetType\u003c/span\u003e\u003cspan class=\"o\"\u003e()))\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003earguments\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eOptional\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eempty\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"c1\"\u003e// otherwise leave it null\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003eelse\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"n\"\u003earguments\u003c/span\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003ei\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003evalueTypedDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003evalue\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003etry\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"n\"\u003erecordClass\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003egetConstructor\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eargumentTypes\u003c/span\u003e\u003cspan class=\"o\"\u003e).\u003c/span\u003e\u003cspan class=\"na\"\u003enewInstance\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003earguments\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ecatch\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eInstantiationException\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nc\"\u003eIllegalAccessException\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nc\"\u003eInvocationTargetException\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nc\"\u003eNoSuchMethodException\u003c/span\u003e \u003cspan class=\"o\"\u003e|\u003c/span\u003e \u003cspan class=\"nc\"\u003eIllegalArgumentException\u003c/span\u003e \u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"k\"\u003ethrow\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nf\"\u003eRuntimeException\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e};\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"generics\"\u003eGenerics\u003c/h2\u003e\n\u003cp\u003eBecause of \u003ca href=\"https://docs.oracle.com/javase/tutorial/java/generics/erasure.html\" target=\"_blank\" rel=\"noopener\"\u003eerasure\u003c/a\u003e, there is no way in Java to specify many object types that we might want to deserialize such as generic lists (e.g. \u003ccode class=\"language-plaintext highlighter-rouge\"\u003eList\u0026lt;String\u0026gt;\u003c/code\u003e). However generic type information is not completely lost at compile-time in Java. The Java runtime retains a surprising amount of generic type information. In fact, we can create a real generic type for any generic definition we need by using a very simple utility called a “type token”. Sadly, the JDK does not include a utility to create these type tokens. Fortunately, the code to create them is just a few Java lines. The included \u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java\" target=\"_blank\" rel=\"noopener\"\u003eTypeToken.java\u003c/a\u003e utility provides this. To create a type token for a list of strings write:\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"c1\"\u003e// create a type token that represents a list of string\u003c/span\u003e\r\n\u003cspan class=\"nc\"\u003eTypeToken\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eList\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eString\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003etypeToken\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypeToken\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026gt;(){};\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eWe can use this type token to deserialize a list of records, strings, optionals, and others:\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonParser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\r\n\u003cspan class=\"nc\"\u003eString\u003c/span\u003e \u003cspan class=\"n\"\u003ejsonText\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s\"\u003e\"[1, 2, 3]\"\u003c/span\u003e\u003cspan class=\"o\"\u003e;\u003c/span\u003e\r\n\u003cspan class=\"nc\"\u003eTypeToken\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eList\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eInteger\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003etypeToken\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003eTypeToken\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u0026gt;()\u003c/span\u003e \u003cspan class=\"o\"\u003e{};\u003c/span\u003e\r\n\u003cspan class=\"nc\"\u003eList\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nc\"\u003eInteger\u003c/span\u003e\u003cspan class=\"o\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"n\"\u003eints\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eparse\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ejsonText\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003echars\u003c/span\u003e\u003cspan class=\"o\"\u003e()).\u003c/span\u003e\u003cspan class=\"na\"\u003ecollect\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eJsonDeserializerCollector\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003edeserializing\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003etypeToken\u003c/span\u003e\u003cspan class=\"o\"\u003e));\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"test-it-out-for-yourself\"\u003eTest it out for yourself!\u003c/h2\u003e\n\u003cp\u003eIn the previous articles we developed a serializer, a printer and a parser. Now we can do a complete round trip from a Java object, to JSON tokens, to JSON text, back to JSON tokens and back to the original Java object.\u003c/p\u003e\n\u003cp\u003eLet’s put this together in jshell. The example uses these files:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java\" target=\"_blank\" rel=\"noopener\"\u003eTypeToken.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonToken.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonToken.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonSerializer.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonSerializer.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/StringUtils.java\" target=\"_blank\" rel=\"noopener\"\u003eStringUtils.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonPrinter.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonPrinter.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonParser.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonParser.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializer.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonDeserializer.java\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializerCollector.java\" target=\"_blank\" rel=\"noopener\"\u003eJsonDeserializerCollector.java\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFrom a terminal with \u003ca href=\"https://jdk.java.net/19/\" target=\"_blank\" rel=\"noopener\"\u003eJava 19\u003c/a\u003e installed, run the following (note you’ll need the \u003ca href=\"https://wiki.archiveteam.org/index.php/Wget_installation\" target=\"_blank\" rel=\"noopener\"\u003ewget utility\u003c/a\u003e):\u003c/p\u003e\n\u003cdiv class=\"language-shell highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003ewget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/TypeToken.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonToken.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonSerializer.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/StringUtils.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonPrinter.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonParser.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializer.java\r\nwget \u003cspan class=\"nt\"\u003e-nc\u003c/span\u003e https://raw.githubusercontent.com/starburstdata/developer-blog-assets/main/bleeding-edge-java/code/JsonDeserializerCollector.java\r\njshell \u003cspan class=\"nt\"\u003e--enable-preview\u003c/span\u003e TypeToken.java JsonToken.java JsonSerializer.java StringUtils.java JsonPrinter.java JsonParser.java JsonDeserializer.java JsonDeserializerCollector.java\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eInside jshell let’s serialize a Java record into JSON tokens, print those tokens into JSON text, parse that text back into a stream of JSON tokens and finally deserialize those tokens back into a Java record. We can compare the two records to ensure it worked properly.\u003c/p\u003e\n\u003cdiv class=\"language-java highlighter-rouge\"\u003e\n\u003cdiv class=\"highlight\"\u003e\n\u003cdiv class=\"hcb_wrap\"\u003e\n\u003cpre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"\u003e\u003ccode\u003e\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonSerializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003eprinter\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonPrinter\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003eparser\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonParser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializer\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nc\"\u003eJsonDeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003einstance\u003c/span\u003e\u003cspan class=\"o\"\u003e();\u003c/span\u003e\r\n\r\n\u003cspan class=\"n\"\u003erecord\u003c/span\u003e \u003cspan class=\"nf\"\u003ePerson\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eString\u003c/span\u003e \u003cspan class=\"n\"\u003ename\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"n\"\u003eage\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"o\"\u003e{}\u003c/span\u003e\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003eperson\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"k\"\u003enew\u003c/span\u003e \u003cspan class=\"nc\"\u003ePerson\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\"someone\"\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"mi\"\u003e28\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n\r\n\u003cspan class=\"kt\"\u003evar\u003c/span\u003e \u003cspan class=\"n\"\u003edeserializedPerson\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eserialize\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eperson\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e// serialize to stream of JsonToken\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eprinter:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eprint\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e// map each JsonToken to a String (as a CharSequence)\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003emap\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eCharSequence:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003echars\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e// map each CharSequence to an IntStream\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eflatMap\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nl\"\u003eparser:\u003c/span\u003e\u003cspan class=\"o\"\u003e:\u003c/span\u003e\u003cspan class=\"n\"\u003eparse\u003c/span\u003e\u003cspan class=\"o\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e// pass each IntStream to the parser and flatten the resulting stream of tokens\u003c/span\u003e\r\n \u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003ecollect\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"nc\"\u003eJsonDeserializerCollector\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003edeserializing\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeserializer\u003c/span\u003e\u003cspan class=\"o\"\u003e,\u003c/span\u003e \u003cspan class=\"nc\"\u003ePerson\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eclass\u003c/span\u003e\u003cspan class=\"o\"\u003e));\u003c/span\u003e \u003cspan class=\"c1\"\u003e// use the collector to reduce the tokens into a Person via the deserializer\u003c/span\u003e\r\n\r\n\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eperson\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eequals\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edeserializedPerson\u003c/span\u003e\u003cspan class=\"o\"\u003e))\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\r\n \u003cspan class=\"nc\"\u003eSystem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eout\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eprintln\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\"It worked!\"\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\r\n\u003cspan class=\"o\"\u003e}\u003c/span\u003e\r\n\u003cspan class=\"nc\"\u003eSystem\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eout\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"na\"\u003eprintln\u003c/span\u003e\u003cspan class=\"o\"\u003e(\u003c/span\u003e\u003cspan class=\"s\"\u003e\"Done.\"\u003c/span\u003e\u003cspan class=\"o\"\u003e);\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ch2 id=\"summary\"\u003eSummary\u003c/h2\u003e\n\u003cp\u003eWe rounded out deserialization nicely now and have a full library at our hands. Lets move on to our final thoughts in the series conclusion.\u003c/p\u003e\n\u003ch2 id=\"were-hiring\"\u003eWe’re hiring\u003c/h2\u003e\n\u003cp\u003eWant to be able to use the latest features of Java? \u003ca href=\"https://www.starburst.io/careers/\" target=\"_blank\" rel=\"noopener\"\u003eWe’re hiring!\u003c/a\u003e\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eJordan Zimmerman is a Senior Software Engineer working on \u003ca href=\"https://www.starburst.io/platform/starburst-galaxy/\" target=\"_blank\" rel=\"noopener\"\u003eStarburst Galaxy\u003c/a\u003e.\u003c/p\u003e\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"div\",null,{\"className\":\"container relative mx-auto px-4 md:px-8 xl:px-24 z-10 pb-[100px]\",\"children\":[\"$\",\"div\",null,{\"className\":\"mb-10 flex flex-col items-start justify-between gap-6 pt-12 md:flex-row lg:pt-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-1 flex-col\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"pb-12 text-[2.5rem] leading-[3.25rem] text-white prose-img:max-h-60 prose-img:w-full prose-img:max-w-lg md:text-[4rem] md:leading-[4.25rem]\",\"children\":\"Deserialization part 2\"}],null,[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-6\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$undefined\",[\"$\",\"time\",null,{\"className\":\"text-sm text-gray-600\",\"children\":\"September 20, 2022\"}]]}],[\"$\",\"div\",null,{\"className\":\"block md:hidden\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-8\",\"children\":[[\"$\",\"li\",\"cG9zdDoyNDQwNQ==\",{\"className\":\"flex items-center gap-4\",\"children\":[[\"$\",\"$L8f\",\"cG9zdDoyNDQwNQ==\",{\"className\":\"block rounded-full border border-solid border-white\",\"fallbackSrc\":\"/_next/static/media/anonymous-author.9fb47b5c.webp\",\"width\":40,\"height\":40,\"src\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2023/04/Jordan-Zimmerman-150x150.png\",\"alt\":\"Jordan Zimmerman\"}],[\"$\",\"div\",null,{\"className\":\"flex max-w-56 flex-col\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xs font-semibold text-white\",\"children\":\"Jordan Zimmerman\"}],[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-600\",\"children\":\"Staff Software Engineer\"}],[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-600\",\"children\":\"Starburst\"}]]}]]}]]}]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"hidden md:block\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-8\",\"children\":[[\"$\",\"li\",\"cG9zdDoyNDQwNQ==\",{\"className\":\"flex items-center gap-4\",\"children\":[[\"$\",\"$L8f\",\"cG9zdDoyNDQwNQ==\",{\"className\":\"block rounded-full border border-solid border-white\",\"fallbackSrc\":\"/_next/static/media/anonymous-author.9fb47b5c.webp\",\"width\":40,\"height\":40,\"src\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2023/04/Jordan-Zimmerman-150x150.png\",\"alt\":\"Jordan Zimmerman\"}],[\"$\",\"div\",null,{\"className\":\"flex max-w-56 flex-col\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xs font-semibold text-white\",\"children\":\"Jordan Zimmerman\"}],[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-600\",\"children\":\"Staff Software Engineer\"}],[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-600\",\"children\":\"Starburst\"}]]}]]}]]}]}]]}]}],[\"$\",\"div\",null,{\"className\":\"relative bg-white -mt-32 md:-mt-48 xl:-mt-64\",\"children\":[[\"$\",\"div\",null,{\"className\":\"$undefined\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute left-2/4 top-0 h-auto w-[100%] -translate-x-2/4 overflow-hidden lg:left-0 lg:h-[15rem] lg:w-full lg:translate-x-0 xl:h-[20rem] 2xl:h-[25rem]\",\"children\":[\"$\",\"$L90\",null,{\"className\":\"-ml-px h-auto w-[calc(100%_+_2px)] max-w-[calc(100%_+_2px)] object-contain lg:h-full lg:object-fill\",\"src\":\"/_next/static/media/eclipse-top.a338658d.png\",\"alt\":\"\",\"width\":2880,\"height\":433,\"priority\":true}]}],[\"$\",\"div\",null,{\"className\":\"absolute bottom-0 left-2/4 h-auto w-[100%] -translate-x-2/4 overflow-hidden lg:left-0 lg:h-[15rem] lg:w-full lg:translate-x-0 xl:h-[20rem] 2xl:h-[25rem]\",\"children\":[\"$\",\"$L90\",null,{\"className\":\"-ml-px h-auto w-[calc(100%_+_2px)] max-w-[calc(100%_+_2px)] object-contain lg:h-full lg:object-fill\",\"src\":\"/_next/static/media/eclipse-bottom.96f049e9.png\",\"alt\":\"\",\"width\":2880,\"height\":463}]}]]}],[\"$\",\"div\",null,{\"className\":\"relative min-h-[600px] py-32 md:py-48 xl:py-64\",\"children\":[\"$\",\"div\",null,{\"className\":\"container relative mx-auto px-4 md:px-8 xl:px-24 pb-16 md:pb-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mt-24 block grid-cols-12 gap-x-10 gap-y-6 sm:gap-y-24 md:grid\",\"children\":[[\"$\",\"div\",null,{\"className\":\"col-span-12 gap-12 border-t border-solid border-t-[#080808] md:col-span-4 lg:col-span-3\",\"children\":[\"$\",\"div\",null,{\"className\":\"md:sticky md:top-[0.6rem]\",\"children\":[[\"$\",\"$L91\",null,{\"link\":\"https://live-starburst.pantheonsite.io/blog/2022-09-20-bej6-deserialization-html/\",\"className\":\"\"}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h4\",null,{\"className\":\"color-[#757575] m-0 mb-5 mt-8 text-xl font-semibold\",\"children\":\"More deployment options\"}],[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-4\",\"children\":[\"$\",\"li\",null,{\"className\":\"border-t border-solid border-t-[#080808] py-4\",\"children\":[\"$\",\"$L92\",null,{\"className\":\"text-sm text-[#757575] hover:text-[rgba(117,117,117,0.6)]\",\"href\":\"/platform/starburst-enterprise\",\"children\":[\"Request Enterprise trial license key \",[\"$\",\"span\",null,{\"className\":\"ml-1\",\"children\":\"→\"}]]}]}]}]]}]]}]}],[\"$\",\"div\",null,{\"className\":\"col-span-12 flex max-w-full flex-col gap-4 border-t border-solid border-t-[#080808] pt-14 md:col-span-8 md:pt-6 lg:col-span-9\",\"children\":[[\"$\",\"div\",null,{\"className\":\"prose-sb-full min-w-full\",\"dangerouslySetInnerHTML\":{\"__html\":\"$93\"}}],null]}]]}],null]}]}]]}]]\n"])</script><script>self.__next_f.push([1,"14:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Deserialization part 2 | Starburst\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types.\"}],[\"$\",\"meta\",\"4\",{\"name\":\"facebook-domain-verification\",\"content\":\"8pp85eyur61kj2mywwvmldhbve10sf\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"Deserialization part 2 | Starburst\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types.\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image\",\"content\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2021/01/starburst-og.jpg\"}],[\"$\",\"meta\",\"8\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:title\",\"content\":\"Deserialization part 2 | Starburst\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:description\",\"content\":\"In part six of the Bleeding edge Java series, read more about deserialization and adding support for complex types.\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:image\",\"content\":\"https://live-starburst.pantheonsite.io/wp-content/uploads/2021/01/starburst-og.jpg\"}],[\"$\",\"link\",\"12\",{\"rel\":\"icon\",\"href\":\"/favicon-l.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"13\",{\"rel\":\"icon\",\"href\":\"/favicon-d.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"meta\",\"14\",{\"name\":\"next-size-adjust\"}]]\nc:null\n"])</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10