{"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\/es\/resolving-keys-embedded-within-json\/","title":{"rendered":"Resoluci\u00f3n de claves incrustadas en JSON"},"content":{"rendered":"<p>Hoy ha surgido una pregunta de un desarrollador que quer\u00eda migrar a Couchbase desde otra cosa.  Ese \"algo m\u00e1s\" ten\u00eda un documento JSON con algunos metadatos.  Couchbase separa los datos de los metadatos por algunas buenas razones, as\u00ed que tendr\u00edamos que eliminar este campo \"_id\". Afortunadamente es bastante f\u00e1cil escribir un m\u00e9todo de extensi\u00f3n para hacer esto con el SDK de .NET o si est\u00e1s usando POCOs (Plan Ole' Csharp Objects), usar un ContractResolver personalizado.<\/p>\n<h2>El escenario<\/h2>\n<p>Suponga que tiene un documento parecido a \u00e9ste, quiz\u00e1s almacenado en disco:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/b06e7a2b3d36abc564aa.js\"><\/script><\/p>\n<p>Lo que quieres hacer es eliminar el id del propio documento y convertirlo en la clave del documento que insertar\u00e1s en Couchbase. Una vez hecho esto habr\u00e1 dos documentos almacenados en Couchbase: el propio documento y los metadatos del documento.<\/p>\n<h2>\u00bfMetadatos del documento? \u00bfContenido? \u00bfCu\u00e1l es la diferencia?<\/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\">Metadatos<\/a> son datos sobre el propio documento, pero no sobre su contenido. Contiene los siguientes valores:<\/p>\n<ul>\n<li><strong>TTL<\/strong> - fecha de caducidad del documento<\/li>\n<li><strong>CAS<\/strong> - comparar e intercambiar valores para garantizar una concurrencia optimista en una clave<\/li>\n<li><strong>Banderas<\/strong> - Metadatos espec\u00edficos del SDK para la transcodificaci\u00f3n<\/li>\n<li><strong>N\u00famero de secuencia<\/strong> - un valor utilizado internamente en Couchbase para la resoluci\u00f3n de conflictos para claves que se actualizan en diferentes clusters - cosa de replicaci\u00f3n entre centros de datos (XDCR)<\/li>\n<li><strong>Clave<\/strong> - el identificador \u00fanico del propio documento<\/li>\n<\/ul>\n<p>Toda esta informaci\u00f3n es \u00fatil fuera del propio contenido, tan importante que se separa y persiste en memoria. El tama\u00f1o de los metadatos var\u00eda entre las versiones de Couchbase; a partir de la 2.1.0 es de 54k, que es bastante peque\u00f1o. Ahora el contenido del documento, es el propio JSON o datos binarios.<\/p>\n<h2>Uso de resolvedores de contratos personalizados con m\u00e9todos de extensi\u00f3n<\/h2>\n<p>Hay dos cosas que tenemos que hacer: obtener el valor clave para el \"_id\" del documento y en segundo lugar es asegurarse de que durante la serializaci\u00f3n que el valor \"_id\" no se persiste con el contenido. Lo primero requiere que analicemos la cadena JSON y extraigamos el \"_Id\" para luego asignarlo al nuevo documento que insertaremos en Couchbase. Esto \u00faltimo puede hacerse de dos maneras: usando un ContractResolver personalizado o manipulando el JSON como un JObject en s\u00ed mismo. Resulta que, para soportar tanto POCO's como la palabra clave din\u00e1mica, necesitas hacer ambas cosas.<\/p>\n<h3>El IgnoreFieldContractResolver<\/h3>\n<p>El SDK .NET de Couchbase utiliza por defecto el m\u00e9todo <a href=\"https:\/\/www.newtonsoft.com\/json\" target=\"_blank\" rel=\"noopener noreferrer\">Marco JSON de NewtonSoft<\/a> para .NET. Cuando est\u00e1 configurando su cliente, hay un gancho para asignar un resolvedor de contratos personalizado. Un contrato resuelve de los campos de su JSON a su modelo de objetos. Un resolver personalizado le permite hacer cosas como ignorar o modificar los campos dentro de su JSON ... funciona como una especie de filtro.<\/p>\n<p>Este es el listado para un resolver personalizado que ignora cualquier nombre de campo que le pases al constructor:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/a547c942c99293cd4ac7.js\"><\/script><\/p>\n<p>No hay mucho que hacer aqu\u00ed, b\u00e1sicamente estamos derivando de DefaultContractResolver y sobreescribiendo el m\u00e9todo CreateProperties. En este caso estamos omitiendo el JsonProperty que es el nombre del campo FieldToIgnore de ser serializado. Si ahora configuras el ClientConfiguration para usarlo, as\u00ed:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/b86867405773350828d2.js\"><\/script><\/p>\n<p>Entonces todos los documentos JSON que se serialicen tendr\u00e1n su FieldToIgnore despojado; en nuestro caso usamos el campo \"_id\", ya que no queremos que persista (ya que se convertir\u00e1 en la clave de metadatos).<\/p>\n<h3>Extracci\u00f3n del Id e inserci\u00f3n del JSON con un m\u00e9todo de extensi\u00f3n<\/h3>\n<p>Ahora que tenemos un resolvedor de contratos que eliminar\u00e1 el campo \"_id\" de cualquier JSON que insertemos usando el cliente, podemos extraer el id del documento (el valor de \"_id\") y usarlo como clave para la inserci\u00f3n.<\/p>\n<p>Ten en cuenta que hay dos casos (principales) para almacenar JSON (desde una perspectiva SDK) en Couchbase. Puedes almacenar un POCO que represente el documento JSON o puedes insertar el documento JSON como un Type din\u00e1mico. Cada uno requiere una consideraci\u00f3n especial, pero es bastante f\u00e1cil escribir un m\u00e9todo de extensi\u00f3n que abstraiga esto:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/77ea2eac7b9d2c07fb51.js\"><\/script><\/p>\n<p>La consideraci\u00f3n \"especial\" aqu\u00ed para los tipos din\u00e1micos es que no se puede confiar en la reflexi\u00f3n sobre T, ya que T ser\u00e1 un objeto. Necesita crear primero un JObject y luego usarlo para obtener el valor de \"_id\".<\/p>\n<p>Una vez que tengas este m\u00e9todo de extensi\u00f3n en su lugar, puedes escribir c\u00f3digo simple como este para extraer un archivo JSON del disco, extraer la clave e insertarla en Couchbase:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/jeffrymorris\/ca325b17868bb7c35a96.js\"><\/script><\/p>\n<p>F\u00edjese que para el POCO usted apunta al campo \"Id\" y para el din\u00e1mico apunta a \"_id\", esto es simplemente porque para el din\u00e1mico sacamos el valor directamente del JObject, por lo tanto reflejar\u00e1 el casing y las convenciones del JSON original.<\/p>\n<p>Ahora si miras el documento JSON en Couchbase Managment Console, ver\u00e1s que el campo \"_id\" fue eliminado del documento y usado para la clave:<\/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>Conseguir la fuente:<\/h2>\n<p>Si quieres jugar con la fuente que utilic\u00e9 para este post, est\u00e1 en <a href=\"https:\/\/github.com\/couchbaselabs\" target=\"_blank\" rel=\"noopener noreferrer\">laboratorios couchbase<\/a> en Github. La intenci\u00f3n del proyecto (<a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-net-contrib\" target=\"_blank\" rel=\"noopener noreferrer\">couchbase-net-contrib<\/a>) es proporcionar extensiones y plugins que se utilizan com\u00fanmente cuando se trabaja con el SDK de Couchbase, pero que probablemente no se incluir\u00e1n en el SDK actual. Est\u00e1 pensado para ser impulsado por la comunidad, \u00a1as\u00ed que si\u00e9ntete libre de enviar un pull request con cualquier contribuci\u00f3n que creas que puede ser \u00fatil para otros!<\/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>","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"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\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\/es\/resolving-keys-embedded-within-json\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"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\/es\/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\/es\/resolving-keys-embedded-within-json\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/resolving-keys-embedded-within-json\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Ingeniero Superior de Software, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","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 es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jeff-morris\/"}]}},"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","first_name":"Jeff","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","user_url":"","author_category":"","description":"Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta)."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1893"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1893"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}