{"id":511,"date":"2017-04-12T17:52:56","date_gmt":"2017-04-12T20:52:56","guid":{"rendered":"http:\/\/gianfratti.com\/?p=511"},"modified":"2017-04-12T18:48:07","modified_gmt":"2017-04-12T21:48:07","slug":"gerando-jsons-aleatorios-para-testes-com-o-json-generator","status":"publish","type":"post","link":"https:\/\/gianfratti.com\/index.php\/gerando-jsons-aleatorios-para-testes-com-o-json-generator\/","title":{"rendered":"Gerando JSONs aleat\u00f3rios para testes com o JSON Generator"},"content":{"rendered":"<p>Hoje eu vou compartilhar com voc\u00eas um site que resolve um problema bem chato para programadores front end de projetos corporativos \u2013 como ter JSONs aleat\u00f3rios para testar o processamento do retorno de servi\u00e7os RESTful antes dos servi\u00e7os estarem prontos.<!--more--><\/p>\n<p>Acesse o site do <a href=\"http:\/\/www.json-generator.com\/\" target=\"_blank\">JSON Generator<\/a><\/p>\n<p>Quando voc\u00ea entra no site, ver\u00e1 uma estrutura grande na parte esquerda da tela. \u00c9 aqui que voc\u00ea deve montar seu JSON. Por enquanto, vamos deixar assim.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-515 alignnone\" src=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator01.jpg\" alt=\"\" width=\"480\" height=\"569\" srcset=\"https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator01.jpg 480w, https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator01-253x300.jpg 253w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/p>\n<p>Basta clicar em <strong>Generate<\/strong> e voc\u00ea ter\u00e1 seu JSON aleat\u00f3rio na parte direita da tela, j\u00e1 com op\u00e7\u00f5es para baixar o arquivo (<strong>Download<\/strong>), mudar a formata\u00e7\u00e3o (clique no <strong>2 Space tabs<\/strong> e veja as op\u00e7\u00f5es) e at\u00e9 mesmo hospedar seu JSON no servidor do JSON Generator (<strong>Upload<\/strong>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-512 alignnone\" src=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04.jpg\" alt=\"\" width=\"501\" height=\"366\" srcset=\"https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04.jpg 501w, https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04-300x219.jpg 300w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/p>\n<p>Se voc\u00ea fez isso, clique em <strong>Copy URL<\/strong> para copiar o endere\u00e7o para acessar o JSON (o que faz seu teste de acesso a um back-end at\u00e9 mais completo, j\u00e1 que voc\u00ea realmente vai baixar remotamente o arquivo).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-513 alignnone\" src=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator03.jpg\" alt=\"\" width=\"303\" height=\"307\" srcset=\"https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator03.jpg 303w, https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator03-296x300.jpg 296w\" sizes=\"auto, (max-width: 303px) 100vw, 303px\" \/><\/p>\n<p>Mas voc\u00ea n\u00e3o vai usar o arquivo base gerado pelo JSON Generator, voc\u00ea vai querer fazer algum arquivo que finja ser o back-end personalizado. Ent\u00e3o vamos come\u00e7ar!<\/p>\n<p>Se seu back-end devolve um objeto com <strong>nome<\/strong> e <strong>sobrenome<\/strong>, podemos fazer assim:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{\r\n    nome: '{{firstName()}}',\r\n    sobrenome: '{{surname()}}'\r\n}\r\n<\/pre>\n<p>Estou usando as fun\u00e7\u00f5es <em>firstName()<\/em> e <em>surname()<\/em> do JSON Generator para gerar nomes e sobrenomes. Note que a informa\u00e7\u00e3o, como em qualquer JSON, deve estar entre aspas e as fun\u00e7\u00f5es s\u00e3o invocadas entre dois pares de chaves.<\/p>\n<p>Mas e se voc\u00ea tamb\u00e9m precisa do sexo? Ent\u00e3o use a fun\u00e7\u00e3o <em>gender()<\/em>, que retorna \u2018male\u2019 para masculino e \u2018female\u2019 para feminino. E a pr\u00f3pria fun\u00e7\u00e3o pode ser usada como par\u00e2metro no primeiro nome. Assim:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{ nome: '{{firstName(gender())}}', sobrenome: '{{surname()}}', genero: '{{gender()}}' }\r\n<\/pre>\n<p>E se voc\u00ea quiser a data de nascimento? Use a fun\u00e7\u00e3o <em>date()<\/em>, que aceita tr\u00eas par\u00e2metros opcionais, sendo as datas de intervalo e o formato. Ent\u00e3o para datas entre 15 de Mar\u00e7o de 1970 e 20 de Outubro de 1980, no formato 27\/04\/2016 (data brasileira, dia m\u00ebs ano, qautro digitos para ano e dois para m\u00eas e dia), fazemos assim (note que o formato da data \u00e9 entre aspas duplas, para n\u00e3o confundir com as aspas simples):<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{ nome: '{{firstName(gender())}}', sobrenome: '{{surname()}}', nascimento: '{{date(new Date(1970, 2, 15), new Date(1990, 9, 20), &quot;dd\/MM\/YYYY&quot;)}}' }\r\n<\/pre>\n<p>Precisa de um endere\u00e7o? Vamos combinar as fun\u00e7\u00f5es <em>street()<\/em>, para nome de rua, <em>city()<\/em>, para nome de cidade dos EUA, <em>state()<\/em>, para estado norte americano (ou <em>state(true)<\/em> para o estado abreviado) e <em>country()<\/em>, para o pa\u00eds (ou <em>country(true)<\/em> para o pa\u00eds abreviado). N\u00fameros podem ser gerados com a fun\u00e7\u00e3o integer(), que usa o mesmo esquema de parametriza\u00e7\u00e3o da data \u2013 tr\u00eas par\u00e2metros opcionais, sendo os intervalos e o formato do n\u00famero. Nosso esquema de JSON seria este:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{\r\n    nome: '{{firstName(gender())}}',\r\n    sobrenome: '{{surname()}}',\r\n    nascimento: '{{date(new Date(1970, 2, 15), new Date(1990, 9, 20), &quot;dd\/MM\/YYYY&quot;)}}',\r\n    endereco: '{{street()}}, {{integer()}}, {{city()}} - {{state()}} - {{country()}}'\r\n}\r\n<\/pre>\n<p>Note que cada fun\u00e7\u00e3o deve ser chamada individualmente, voc\u00ea n\u00e3o pode colocar m\u00faltiplas fun\u00e7\u00f5es entre os mesmos pares de chaves <strong>{{}}<\/strong>.<\/p>\n<p>Mas, e se o endere\u00e7o vier num objeto dentro do JSON? Rearranjamos:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{\r\n    nome: '{{firstName(gender())}}',\r\n    sobrenome: '{{surname()}}',\r\n    nascimento: '{{date(new Date(1970, 2, 15), new Date(1990, 9, 20), &quot;dd\/MM\/YYYY&quot;)}}',\r\n    enderecos: {\r\n        endereco: '{{street()}}, {{integer()}}, {{city()}} - {{state()}} - {{country()}}'\r\n   }\r\n}\r\n<\/pre>\n<p>Mas e se mais de um endere\u00e7o vier na vari\u00e1vel <em>enderecos<\/em>, ou seja um vetor de endere\u00e7os? Usamos a fun\u00e7\u00e3o <em>repeat()<\/em>, que repete aleatoriamente um objeto dentro de um vetor entre 0 e 10 vezes. Se voc\u00ea passar <em>repeat(5)<\/em>, o item ser\u00e1 repetido exatamente 5 vezes. Se voc\u00ea passar <em>repeat(5, 15)<\/em>, o item ser\u00e1 repetido aleatoriamente entre 5 e 15 vezes. O vetor deve ter apenas dois itens, o primerio ser\u00e1 a chamada para <em>repeat()<\/em> tamb\u00e9m entre aspas, o segundo ser\u00e1 o item que ser\u00e1 repetido. Assim:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n{\r\n    nome: '{{firstName(gender())}}',\r\n    sobrenome: '{{surname()}}',\r\n    nascimento: '{{date(new Date(1970, 2, 15), new Date(1990, 9, 20), &quot;dd\/MM\/YYYY&quot;)}}',\r\n    enderecos: &#x5B;\r\n        '{{repeat()}}',\r\n        {\r\n            endereco: '{{street()}}, {{integer()}}, {{city()}} - {{state()}} - {{country()}}'\r\n        }]\r\n    }\r\n<\/pre>\n<p>E voc\u00ea pode fazer isso no objeto principal tamb\u00e9m, assim voc\u00ea ter\u00e1 uma lista de pessoas:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&#x5B;\r\n    '{{repeat()}}',\r\n    {\r\n        nome: '{{firstName(gender())}}',\r\n        sobrenome: '{{surname()}}',\r\n        nascimento: '{{date(new Date(1970, 2, 15), new Date(1990, 9, 20), &quot;dd\/MM\/YYYY&quot;)}}',\r\n        enderecos: &#x5B;\r\n            '{{repeat()}}',\r\n            {\r\n            endereco: '{{street()}}, {{integer()}}, {{city()}} - {{state()}} - {{country()}}'\r\n            }]\r\n        }\r\n]\r\n<\/pre>\n<p>Outras fun\u00e7\u00f5es (porque seria tolice citar todas as funcionalidades) est\u00e3o dispon\u00edveis atrav\u00e9s do menu <strong>Help<\/strong>, na parte direita da tela.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-512 alignnone\" src=\"http:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04.jpg\" alt=\"\" width=\"501\" height=\"366\" srcset=\"https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04.jpg 501w, https:\/\/gianfratti.com\/wp-content\/uploads\/2017\/04\/json_generator04-300x219.jpg 300w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/p>\n<p>Espero que o servi\u00e7o seja \u00fatil para voc\u00eas em seus testes prim\u00e1rios de front-ends igual ele me ajuda e me economiza tempo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoje eu vou compartilhar com voc\u00eas um site que resolve um problema bem chato para programadores front end de projetos corporativos \u2013 como ter JSONs aleat\u00f3rios para testar o processamento do retorno de servi\u00e7os RESTful antes dos servi\u00e7os estarem prontos. <span class=\"ellipsis\">&hellip;<\/span> <span class=\"more-link-wrap\"><a href=\"https:\/\/gianfratti.com\/index.php\/gerando-jsons-aleatorios-para-testes-com-o-json-generator\/\" class=\"more-link\"><span>Read More &rarr;<\/span><\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[20],"tags":[98],"class_list":["post-511","post","type-post","status-publish","format-standard","hentry","category-dicas","tag-json"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=511"}],"version-history":[{"count":6,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/511\/revisions"}],"predecessor-version":[{"id":531,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/511\/revisions\/531"}],"wp:attachment":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}