{"id":1893,"date":"2017-01-03T00:24:16","date_gmt":"2017-01-03T00:24:16","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1893"},"modified":"2025-06-13T23:43:33","modified_gmt":"2025-06-14T06:43:33","slug":"resolving-keys-embedded-within-json","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/resolving-keys-embedded-within-json\/","title":{"rendered":"Resolu\u00e7\u00e3o de chaves incorporadas em JSON"},"content":{"rendered":"<p>Hoje, surgiu uma pergunta de um desenvolvedor que queria migrar de outra coisa para o Couchbase.  Essa \"outra coisa\" tinha um documento JSON com alguns metadados.  O Couchbase separa os dados dos metadados por alguns bons motivos, portanto, precisar\u00edamos remover esse campo \"_id\". Felizmente, \u00e9 bastante f\u00e1cil escrever um m\u00e9todo de extens\u00e3o para fazer isso com o SDK do .NET ou, se voc\u00ea estiver usando POCOs (Plan Ole' Csharp Objects), use um ContractResolver personalizado.<\/p>\n<h2>O cen\u00e1rio<\/h2>\n<p>Suponha que voc\u00ea tenha um documento parecido com este, talvez armazenado em disco:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/b06e7a2b3d36abc564aa.js\"><\/script><\/p>\n<p>O que voc\u00ea deseja fazer \u00e9 remover sem problemas o id do pr\u00f3prio documento e torn\u00e1-lo a chave do documento que ser\u00e1 inserido no Couchbase. Quando isso for feito, haver\u00e1 dois documentos armazenados no Couchbase: o pr\u00f3prio documento e os metadados do documento.<\/p>\n<h2>Metadados do documento? Conte\u00fado? Qual \u00e9 a diferen\u00e7a?<\/h2>\n<p><a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/3.x\/developer\/dev-guide-3.0\/keys-values.html\" target=\"_blank\" rel=\"noopener noreferrer\">Metadados<\/a> s\u00e3o dados sobre o pr\u00f3prio documento, mas n\u00e3o sobre o conte\u00fado do documento. Ele cont\u00e9m os seguintes valores:<\/p>\n<ul>\n<li><strong>TTL<\/strong> - tempo de expira\u00e7\u00e3o do documento<\/li>\n<li><strong>CAS<\/strong> - comparar e trocar valores para garantir a simultaneidade otimista em uma chave<\/li>\n<li><strong>Bandeiras<\/strong> - Metadados espec\u00edficos do SDK para transcodifica\u00e7\u00e3o<\/li>\n<li><strong>N\u00famero de sequ\u00eancia<\/strong> - um valor usado internamente no Couchbase para a resolu\u00e7\u00e3o de conflitos de chaves que s\u00e3o atualizadas em clusters diferentes - algo como replica\u00e7\u00e3o entre centros de dados (XDCR)<\/li>\n<li><strong>Chave<\/strong> - o identificador exclusivo do pr\u00f3prio documento<\/li>\n<\/ul>\n<p>Todas essas informa\u00e7\u00f5es s\u00e3o \u00fateis fora do conte\u00fado em si, t\u00e3o importantes que s\u00e3o separadas e persistem na mem\u00f3ria. O tamanho dos metadados varia entre as vers\u00f5es do Couchbase; a partir da vers\u00e3o 2.1.0, ele \u00e9 de 54k, o que \u00e9 bastante pequeno. Agora, o conte\u00fado do documento \u00e9 o JSON real ou os dados bin\u00e1rios em si.<\/p>\n<h2>Uso de resolvedores de contrato personalizados com m\u00e9todos de extens\u00e3o<\/h2>\n<p>H\u00e1 duas coisas que precisamos fazer: obter o valor-chave para o \"_id\" do documento e, em segundo lugar, garantir que, durante a serializa\u00e7\u00e3o, o valor \"_id\" n\u00e3o seja persistido com o conte\u00fado. O primeiro requer que analisemos a cadeia de caracteres JSON e extraiamos o \"_Id\" e, em seguida, o atribu\u00edmos ao novo documento que ser\u00e1 inserido no Couchbase. Isso pode ser feito de duas maneiras: usando um ContractResolver personalizado ou manipulando o JSON como um JObject em si. Acontece que, para oferecer suporte a POCOs e \u00e0 palavra-chave din\u00e2mica, voc\u00ea precisa fazer as duas coisas.<\/p>\n<h3>O IgnoreFieldContractResolver<\/h3>\n<p>O SDK do Couchbase .NET, por padr\u00e3o, usa o <a href=\"https:\/\/www.newtonsoft.com\/json\" target=\"_blank\" rel=\"noopener noreferrer\">Estrutura JSON da NewtonSoft<\/a> para .NET. Ao configurar o cliente, h\u00e1 um gancho para atribuir um resolvedor de contrato personalizado. Um contrato resolve os campos de seu JSON para seu modelo de objeto. Um resolvedor personalizado permite que voc\u00ea fa\u00e7a coisas como ignorar ou modificar campos no seu JSON... ele funciona como um filtro.<\/p>\n<p>Aqui est\u00e1 a listagem de um resolvedor personalizado que ignora qualquer nome de campo que voc\u00ea passar para o construtor:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/a547c942c99293cd4ac7.js\"><\/script><\/p>\n<p>N\u00e3o h\u00e1 muita coisa acontecendo aqui, basicamente estamos derivando do DefaultContractResolver e substituindo o m\u00e9todo CreateProperties. Nesse caso, estamos omitindo a serializa\u00e7\u00e3o da JsonProperty que \u00e9 o nome do campo FieldToIgnore. Se voc\u00ea agora definir a ClientConfiguration para us\u00e1-lo, assim:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/b86867405773350828d2.js\"><\/script><\/p>\n<p>Ent\u00e3o, todos os documentos JSON que forem serializados ter\u00e3o seu FieldToIgnore removido; em nosso caso, usamos o campo \"_id\", pois n\u00e3o queremos que ele seja mantido (j\u00e1 que ele se tornar\u00e1 a chave de metadados).<\/p>\n<h3>Extraindo o Id e inserindo o JSON com um m\u00e9todo de extens\u00e3o<\/h3>\n<p>Agora que temos um resolvedor de contratos que remover\u00e1 o campo \"_id\" de qualquer JSON que inserirmos usando o cliente, podemos extrair o ID do documento (o valor de \"_id\") e us\u00e1-lo como chave para a inser\u00e7\u00e3o.<\/p>\n<p>Observe que h\u00e1 dois casos (principais) para armazenar JSON (de uma perspectiva de SDK) no Couchbase. Voc\u00ea pode armazenar um POCO que representa o documento JSON ou pode inserir o documento JSON como um tipo din\u00e2mico. Cada um deles exige uma considera\u00e7\u00e3o especial, mas \u00e9 muito f\u00e1cil escrever um m\u00e9todo de extens\u00e3o que abstraia isso:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/77ea2eac7b9d2c07fb51.js\"><\/script><\/p>\n<p>A considera\u00e7\u00e3o \"especial\" aqui para tipos din\u00e2micos \u00e9 que voc\u00ea n\u00e3o pode confiar na reflex\u00e3o sobre T, pois T ser\u00e1 um objeto. Voc\u00ea precisa criar um JObject primeiro e depois us\u00e1-lo para obter o valor de \"_id\".<\/p>\n<p>Quando voc\u00ea tiver esse m\u00e9todo de extens\u00e3o implementado, poder\u00e1 escrever um c\u00f3digo simples como este para extrair um arquivo JSON do disco, extrair a chave e inseri-la no Couchbase:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/ca325b17868bb7c35a96.js\"><\/script><\/p>\n<p>Observe que, para o POCO, voc\u00ea direciona o campo \"Id\" e, para o din\u00e2mico, direciona o \"_id\". Isso ocorre simplesmente porque, no din\u00e2mico, extra\u00edmos o valor diretamente do JObject e, portanto, ele refletir\u00e1 o inv\u00f3lucro e as conven\u00e7\u00f5es do JSON original.<\/p>\n<p>Agora, se voc\u00ea observar o documento JSON no Couchbase Managment Console, ver\u00e1 que o campo \"_id\" foi removido do documento e usado como chave:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/february-2015\/resolving-keys-embedded-within-json\/json-with-id-stripped.jpeg\" width=\"600px\" \/><\/p>\n<h2>Obtendo a fonte:<\/h2>\n<p>Se voc\u00ea quiser brincar com a fonte que usei para esta postagem, ela&apos;est\u00e1 em <a href=\"https:\/\/github.com\/couchbaselabs\" target=\"_blank\" rel=\"noopener noreferrer\">laborat\u00f3rios couchbase<\/a> no Github. A inten\u00e7\u00e3o do projeto (<a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-net-contrib\" target=\"_blank\" rel=\"noopener noreferrer\">couchbase-net-contrib<\/a>) \u00e9 fornecer extens\u00f5es e plug-ins que s\u00e3o comumente usados ao trabalhar com o SDK do Couchbase, mas provavelmente n\u00e3o ser\u00e3o inclu\u00eddos no SDK real. A inten\u00e7\u00e3o \u00e9 que ele seja orientado pela comunidade, portanto, sinta-se \u00e0 vontade para enviar solicita\u00e7\u00f5es de pull com quaisquer contribui\u00e7\u00f5es que voc\u00ea ache que seriam \u00fateis para os outros!<\/p>","protected":false},"excerpt":{"rendered":"<p>A question came up today from a developer looking to migrate to Couchbase from something else.\u00a0 That \u201csomething else\u201d had a JSON document with some metadata in it.\u00a0 Couchbase separates data from metadata for some good reasons, so then we\u2019d [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811],"tags":[1428,1430],"ppma_author":[8970],"class_list":["post-1893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-couchbase-labs","tag-serialization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Resolving Keys Embedded within JSON - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/resolving-keys-embedded-within-json\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resolving Keys Embedded within JSON\" \/>\n<meta property=\"og:description\" content=\"A question came up today from a developer looking to migrate to Couchbase from something else.\u00a0 That \u201csomething else\u201d had a JSON document with some metadata in it.\u00a0 Couchbase separates data from metadata for some good reasons, so then we\u2019d [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/resolving-keys-embedded-within-json\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-03T00:24:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:43:33+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Resolving Keys Embedded within JSON\",\"datePublished\":\"2017-01-03T00:24:16+00:00\",\"dateModified\":\"2025-06-14T06:43:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/\"},\"wordCount\":896,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"keywords\":[\"couchbase labs\",\"serialization\"],\"articleSection\":[\".NET\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/\",\"name\":\"Resolving Keys Embedded within JSON - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-03T00:24:16+00:00\",\"dateModified\":\"2025-06-14T06:43:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/resolving-keys-embedded-within-json\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resolving Keys Embedded within JSON\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/jeffrysmorris\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pt\\\/author\\\/jeff-morris\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Resolving Keys Embedded within JSON - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/resolving-keys-embedded-within-json\/","og_locale":"pt_BR","og_type":"article","og_title":"Resolving Keys Embedded within JSON","og_description":"A question came up today from a developer looking to migrate to Couchbase from something else.\u00a0 That \u201csomething else\u201d had a JSON document with some metadata in it.\u00a0 Couchbase separates data from metadata for some good reasons, so then we\u2019d [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/resolving-keys-embedded-within-json\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-03T00:24:16+00:00","article_modified_time":"2025-06-14T06:43:33+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Resolving Keys Embedded within JSON","datePublished":"2017-01-03T00:24:16+00:00","dateModified":"2025-06-14T06:43:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/"},"wordCount":896,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["couchbase labs","serialization"],"articleSection":[".NET"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/","url":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/","name":"Resolving Keys Embedded within JSON - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-03T00:24:16+00:00","dateModified":"2025-06-14T06:43:33+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Resolving Keys Embedded within JSON"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, engenheiro de software s\u00eanior, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris \u00e9 engenheiro de software s\u00eanior da Couchbase. Antes de ingressar na Couchbase, Jeff passou seis anos na Source Interlink como arquiteto da Web corporativa. Jeff \u00e9 respons\u00e1vel pelo desenvolvimento dos SDKs do Couchbase e pela integra\u00e7\u00e3o com o N1QL (linguagem de consulta).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/jeff-morris\/"}]}},"acf":[],"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1893"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1893"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}