{"id":19133592,"url":"https://github.com/hashload/jsonbr","last_synced_at":"2025-06-26T20:07:15.376Z","repository":{"id":37697858,"uuid":"500912287","full_name":"HashLoad/JSONBr","owner":"HashLoad","description":"JSONBr Framework for Delphi (Isaque Pinheiro)","archived":false,"fork":false,"pushed_at":"2024-03-30T14:18:38.000Z","size":354,"stargazers_count":7,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-04-14T00:25:40.611Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.isaquepinheiro.com.br","language":"Pascal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HashLoad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-06-07T16:07:53.000Z","updated_at":"2023-12-19T23:48:12.000Z","dependencies_parsed_at":"2024-04-13T14:38:35.036Z","dependency_job_id":null,"html_url":"https://github.com/HashLoad/JSONBr","commit_stats":{"total_commits":41,"total_committers":2,"mean_commits":20.5,"dds":"0.024390243902439046","last_synced_commit":"42fc0086b85513832828df60ad5e4dfa8dd0905f"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2FJSONBr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2FJSONBr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2FJSONBr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HashLoad%2FJSONBr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HashLoad","download_url":"https://codeload.github.com/HashLoad/JSONBr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240214566,"owners_count":19766263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T06:23:01.379Z","updated_at":"2025-02-22T17:41:32.026Z","avatar_url":"https://github.com/HashLoad.png","language":"Pascal","readme":"# JSONBr Library for Delphi\n\nJSON BRASIL é uma library opensource que provê escritas arquivos JSON, de forma funcional e orientada a objeto, além dos recursos de gerar um JSON de um objeto e popular o objeto com base em um arquivo JSON, seu diferencial são os eventos onGetValue() e onSetValue() que dão a dinâmica de tratar seu próprio tipo de campo, alimentado assim o JSON e lendo esse campo dele.\n\nEssa classe estava enraizada ao projeto ORMBr, nela foi feito vários testes em questão de performance, o qual ela se saiu muito bem com as que foi confrontada, visto isso, foi visto a possibilidade de ser uma library independente, que pudesse ser usado até mesmo por outros projetos opensource, mas para isso, o primeiro passo a ser dado seria remover qualquer vínculo com framework ORMBr, então com um pouco de esforço e tempo de dedicação, nasceu o JSONBr.\n\nA cereja do bolo desse projeto é a dinâmica que ele oferece para outros projetos tratar seus tipos de campos criados, através dos dois eventos onGetValue e onSetValue, esses eventos quando usados intercepta o dado do evento interno, possibilitando assim, a verificação do tipo e o tratamento do valor do campo e como ele deve ser aplicado na tag no arquivo\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.isaquepinheiro.com.br\"\u003e\n    \u003cimg src=\"https://www.isaquepinheiro.com.br/projetos/jsonbr-framework-for-delphi-opensource-95504.png\" width=\"200\" height=\"200\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## 🏛 Delphi Versions\nEmbarcadero Delphi XE e superior.\n\n## ⚙️ Instalação\nInstalação usando o [`boss install`]\n```sh\nboss install \"https://github.com/HashLoad/jsonbr\"\n```\n\n## ⚡️ Como usar\n\n```Delphi\nprocedure TTestJSONBr.Loop50000;\nvar\n  LList: TObjectList\u003cTRootDTO\u003e;\n  LObject: TRootDTO;\n  LFor: Integer;\n  LInit, LEnd: Cardinal;\nbegin\n  LList := TObjectList\u003cTRootDTO\u003e.Create;\n  LList.OwnsObjects := True;\n  try\n    LInit := GetTickCount;\n    for LFor := 1 to SAMPLE_JSON_1_COUNT do\n    begin\n      LObject := TJSONBr.JsonToObject\u003cTRootDTO\u003e(SAMPLE_JSON_1);\n      LList.Add(LObject);\n    end;\n    LEnd := GetTickCount;\n    //\n    System.Writeln(Format('..gerando 50.000 objetos de um json object(' + \n                             cMESSAGE, [(LEnd - LInit) / 1000, (LEnd - LInit)]) + ')');\n  finally\n    LList.Clear;\n    LList.Free;\n  end;\nend;\n```\n\n```Delphi\nprocedure TForm1.Button2Click(Sender: TObject);\nvar\n  Person: TPerson;\n  Person1: TpersonSub;\n  Person2: TpersonSub;\nbegin\n  Person := TPerson.Create;\n  try\n    Person.Id := 1;\n    Person.FirstName := '';\n    Person.LastName := 'Json';\n    Person.Age := 10;\n    Person.Salary := 100.10;\n    Person.Date := Now;\n\n    Person.Pessoa.Id := 2;\n    Person.Pessoa.FirstName := 'Json 2';\n    Person.Pessoa.LastName := 'Parse 2';\n    Person.Pessoa.Age := 20;\n    Person.Pessoa.Salary := 200.20;\n    Person.Imagem := '12345678901234567890';\n\n    Person1 := TPersonSub.Create;\n    Person1.Id := 3;\n    Person1.FirstName := 'Json 3';\n    Person1.LastName := 'Parse 3';\n    Person1.Age := 30;\n    Person1.Salary := 300.30;\n\n    Person2 := TPersonSub.Create;\n    Person2.Id := 4;\n    Person2.FirstName := 'Json 4';\n    Person2.LastName := 'Parse 4';\n    Person2.Age := 40;\n    Person2.Salary := 400.40;\n\n    Person.Pessoas.Add(Person1);\n    Person.Pessoas.Add(Person2);\n\n    TJSONBr.OnSetValue := nil; // Criando seu proprio tratamento de tipos\n    TJSONBr.OnGetValue := nil; // Criando seu proprio tratamento de tipos\n    Memo1.Lines.Text := TJSONBr.ObjectToJsonString(Person);\n\n  finally\n    Person.Free;\n  end;\nend;\n```\n\n```Delphi\nprocedure TTestJSONBr.AddPair_1;\nvar\n  LResult: String;\nconst\n  LJSON = '[{\"ID\":1,\"Name\":\"Json\"},[{\"ID\":2,\"Name\":\"Json 2\"},{\"ID\":3,\"Name\":\"Json 3\"}]]';\nbegin\n  LResult := TJSONBr\n               .BeginArray\n                 .BeginObject\n                   .AddPair('ID', 1)\n                   .AddPair('Name', 'Json')\n                 .EndObject\n                 .BeginArray\n                   .BeginObject\n                     .AddPair('ID', 2)\n                     .AddPair('Name', 'Json 2')\n                   .EndObject\n                   .BeginObject\n                     .AddPair('ID', 3)\n                     .AddPair('Name', 'Json 3')\n                   .EndObject\n                 .EndArray\n               .EndArray\n             .ToJSON;\nend;\n```\n\n```Delphi\nprocedure TTestJSONBr.AddValue_1;\nvar\n  LResult: String;\nconst\n  LJSON = '{\"nome\":\"Fulano\",\"idade\":90,\"filmes_preferidos\":[\"Pulp Fiction\",\"Clube da Luta\"],\"contatos\"\n  :{\"telefone\":\"(11)91111-2222\",\"emails\":[\"fulano@gmail.com\",\"fulano@yahoo.com\"]}}';\nbegin\n  LResult := TJSONBr\n              .BeginObject\n                .AddPair('nome', 'Fulano')\n                .AddPair('idade', 90)\n                .AddPairArray('filmes_preferidos', ['Pulp Fiction', 'Clube da Luta'])\n                .BeginObject('contatos')\n                  .AddPair('telefone', '(11)91111-2222')\n                  .AddPairArray('emails', ['fulano@gmail.com', 'fulano@yahoo.com'])\n                .EndObject\n              .EndObject\n            .ToJSON;\nend;\n```\n\n## ✍️ License\n[![License](https://img.shields.io/badge/Licence-LGPL--3.0-blue.svg)](https://opensource.org/licenses/LGPL-3.0)\n\n## ⛏️ Contribuição\n\nNossa equipe adoraria receber contribuições para este projeto open source. Se você tiver alguma ideia ou correção de bug, sinta-se à vontade para abrir uma issue ou enviar uma pull request.\n\n[![Issues](https://img.shields.io/badge/Issues-channel-orange)](https://github.com/HashLoad/ormbr/issues)\n\nPara enviar uma pull request, siga estas etapas:\n\n1. Faça um fork do projeto\n2. Crie uma nova branch (`git checkout -b minha-nova-funcionalidade`)\n3. Faça suas alterações e commit (`git commit -am 'Adicionando nova funcionalidade'`)\n4. Faça push da branch (`git push origin minha-nova-funcionalidade`)\n5. Abra uma pull request\n\n## 📬 Contato\n[![Telegram](https://img.shields.io/badge/Telegram-channel-blue)](https://t.me/hashload)\n\n## 💲 Doação\n[![Doação](https://img.shields.io/badge/PagSeguro-contribua-green)](https://pag.ae/bglQrWD)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashload%2Fjsonbr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhashload%2Fjsonbr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhashload%2Fjsonbr/lists"}