{"id":1478,"date":"2012-03-19T02:35:10","date_gmt":"2012-03-19T09:35:10","guid":{"rendered":"http:\/\/www.andreanolanusse.com\/pt\/?p=1478"},"modified":"2012-04-15T21:26:02","modified_gmt":"2012-04-16T04:26:02","slug":"tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader","status":"publish","type":"post","link":"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/","title":{"rendered":"TDBXJsonTools copiar\/converter dados entre TDataSet &#8211; TJSONObject &#8211; DBXReader"},"content":{"rendered":"<p>Voc\u00ea pode copiar os dados de um DBXReader para um ClientDataSet e vice-versa utilizando o dbxExpress framework, provavelmente voc\u00ea j\u00e1 leu alguns dos meus \u00a0<a title=\"Copiando estrutura e dados de um DBXReader para ClientDataSet \u2013 DataSnap 2010\" href=\"http:\/\/www.andreanolanusse.com\/pt\/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010\/\" target=\"_blank\">artigos<\/a>\u00a0aqui no blog onde explico como isso funciona em aplica\u00e7\u00f5es desktop, entretanto em plataformas m\u00f3veis n\u00e3o temos o ClientDataSet e quando buscamos algo similar vem a pergunta, o que fazer?<\/p>\n<p>DataSnap Mobile Connectors tem um classe chamada TDBXJsonTools que permite a copia e convers\u00e3o de dados entre DBXReader, TJSONObject, DBXReader e outros tipos de dados, pode ser utilizada em qualquer plataforma suportada pelos conectores, como: Java\/Android, Java\/BlackBerry, Objective-C, C#\/Windows Phone e FreePascal.<\/p>\n<p>Em aplica\u00e7\u00f5es desktop nativa utilizamos o TDBXDataSetReader.CopyReaderToClientDataSet(Reader, ClientDataSet) para copiar os dados do DBXReader para um ClientDataSet, no caso de aplica\u00e7\u00f5es m\u00f3veis usamos TDBXJsonTools.CreateTDataSetFromJSON(DBXReader.asJSONObject).<\/p>\n<p>Entretanto n\u00e3o estamos limitados a copia\/convers\u00e3o de dados, TDBXJsonTools traz maior flexibilidade na intera\u00e7\u00e3o e transporte dos dados usando diferentes tipos de dados, al\u00e9m de usar o melhor dos tipos nativos em cada plataforma. Por exemplo, quando utilizamos DataSet em aplica\u00e7\u00f5es FireMonkey para iOS utilizamos a classe TDataSet que \u00e9 parte da RTL do Delphi e FreePascal, j\u00e1 no caso de aplica\u00e7\u00f5es Java, TDataSet ser\u00e1 uma extens\u00e3o do TDBXReader e assim por diante.<\/p>\n<p>DBXReader \u00e9 unidirecional e com isso a navega\u00e7\u00e3o fica limitada, no entanto ao desenvolver aplica\u00e7\u00f5es FireMonkey para iOS voc\u00ea poder\u00e1 copiar os dados do DBXReader para um DataSet que \u00e9 bidirecional, isso ir\u00e1 permitir a navega\u00e7\u00e3o no DataSet e utilizar outros m\u00e9todos do DataSet.<\/p>\n<p>Abaixo a interface da classe TDBXJsonTools para FreePascal.<\/p>\n<pre class=\"brush: delphi\">  TDBXJsonTools = class\r\n  public\r\n    class procedure jsonToDBX(obj: TJSONValue; var value: TDBXValue; dbxTypeName: String);\r\n    class procedure JSONToValueType(json: TJSONArray; var vt: TDBXValueType);\r\n    class function DBXParametersToJSONObject(dbxParameters: TDSParams) : TJSONObject;\r\n    class function DBXReaderToJSONObject(dbxReader: TDBXReader): TJSONObject;\r\n    class function CreateTDataSetFromJSON(value: TJSONObject): TDataset;\r\n    class function TDataSetToJSONObject(value: TDataset): TJSONObject;\r\n    class function GetTFieldTypeByTDBXDataTypes(DBXDataTypes: TDBXDataTypes) : TFieldType;\r\n    class function GetTDBXDataTypesByTFieldType(FieldType: TFieldType) : TDBXDataTypes;\r\n    class function CreateTStreamFromJSONArray(value: TJSONArray): TStream;\r\n    class function StreamToJSONArray(value: TStream): TJSONArray;\r\n    class function JSONToTableType(value: TJSONValue; dbxTypeName: String): TObject;\r\n    class function SerializeTableType(Objetc: TObject): TJSONObject;\r\n\r\n  end;<\/pre>\n<p>Eu continuo recomendando o uso do DBXReader como sua fonte principal de dados e quando necess\u00e1rio utilize os m\u00e9todos da classe TDBXJsonTools.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea pode copiar os dados de um DBXReader para um ClientDataSet e vice-versa utilizando o dbxExpress framework, provavelmente voc\u00ea j\u00e1 leu alguns dos meus \u00a0artigos\u00a0aqui no blog onde explico como isso funciona em aplica\u00e7\u00f5es desktop, entretanto em plataformas m\u00f3veis n\u00e3o temos o ClientDataSet e quando buscamos algo similar vem a pergunta, o que fazer? DataSnap [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1479,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_s2mail":"yes","footnotes":""},"categories":[102,186],"tags":[181,115,29],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>TDBXJsonTools copiar\/converter dados entre TDataSet - TJSONObject - DBXReader | Andreano Lanusse | Tecnologia e Desenvolvimento de Software<\/title>\n<meta name=\"description\" content=\"Voc\u00ea pode copiar os dados de um DBXReader para um ClientDataSet e vice-versa utilizando o dbxExpress framework, provavelmente voc\u00ea j\u00e1 leu alguns dos meus\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TDBXJsonTools copiar\/converter dados entre TDataSet - TJSONObject - DBXReader | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"og:description\" content=\"Voc\u00ea pode copiar os dados de um DBXReader para um ClientDataSet e vice-versa utilizando o dbxExpress framework, provavelmente voc\u00ea j\u00e1 leu alguns dos meus\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/\" \/>\n<meta property=\"og:site_name\" content=\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"article:published_time\" content=\"2012-03-19T09:35:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-04-16T04:26:02+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/07\/json_logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:site\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\">\n\t<meta name=\"twitter:data1\" content=\"2 minutos\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"description\":\"Andreano Lanusse blog - artigos, tutoriais e v&iacute;deos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e t&eacute;cnicas de programa&ccedil;&atilde;o\",\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/www.andreanolanusse.com\/pt\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/07\/json_logo.png\",\"contentUrl\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/07\/json_logo.png\",\"width\":150,\"height\":150},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#webpage\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/\",\"name\":\"TDBXJsonTools copiar\/converter dados entre TDataSet - TJSONObject - DBXReader | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#primaryimage\"},\"datePublished\":\"2012-03-19T09:35:10+00:00\",\"dateModified\":\"2012-04-16T04:26:02+00:00\",\"description\":\"Voc\\u00ea pode copiar os dados de um DBXReader para um ClientDataSet e vice-versa utilizando o dbxExpress framework, provavelmente voc\\u00ea j\\u00e1 leu alguns dos meus\",\"breadcrumb\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#webpage\"}}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#webpage\"},\"author\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"headline\":\"TDBXJsonTools copiar\/converter dados entre TDataSet &#8211; TJSONObject &#8211; DBXReader\",\"datePublished\":\"2012-03-19T09:35:10+00:00\",\"dateModified\":\"2012-04-16T04:26:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#webpage\"},\"commentCount\":1,\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"image\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#primaryimage\"},\"keywords\":[\"Delphi\",\"FireMonkey\",\"JSON\"],\"articleSection\":[\"Delphi\",\"FireMonkey\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/tdbxjsontools-copiarconverter-dados-entre-tdataset-tjsonobject-dbxreader\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\",\"name\":\"Andreano Lanusse\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"caption\":\"Andreano Lanusse\"},\"logo\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\"},\"sameAs\":[\"https:\/\/twitter.com\/andreanolanusse\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1478"}],"collection":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/comments?post=1478"}],"version-history":[{"count":0,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1478\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media\/1479"}],"wp:attachment":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media?parent=1478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/categories?post=1478"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/tags?post=1478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}