JSONBr Library for Delphi
JSON 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.
Essa 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.
A 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
🏛 Delphi Versions
Embarcadero Delphi XE e superior.
⚙️ Instalação
Instalação usando o [boss install]
boss install "https://github.com/HashLoad/jsonbr"⚡️ Como usar
procedure TTestJSONBr.Loop50000; var LList: TObjectList<TRootDTO>; LObject: TRootDTO; LFor: Integer; LInit, LEnd: Cardinal; begin LList := TObjectList<TRootDTO>.Create; LList.OwnsObjects := True; try LInit := GetTickCount; for LFor := 1 to SAMPLE_JSON_1_COUNT do begin LObject := TJSONBr.JsonToObject<TRootDTO>(SAMPLE_JSON_1); LList.Add(LObject); end; LEnd := GetTickCount; // System.Writeln(Format('..gerando 50.000 objetos de um json object(' + cMESSAGE, [(LEnd - LInit) / 1000, (LEnd - LInit)]) + ')'); finally LList.Clear; LList.Free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var Person: TPerson; Person1: TpersonSub; Person2: TpersonSub; begin Person := TPerson.Create; try Person.Id := 1; Person.FirstName := ''; Person.LastName := 'Json'; Person.Age := 10; Person.Salary := 100.10; Person.Date := Now; Person.Pessoa.Id := 2; Person.Pessoa.FirstName := 'Json 2'; Person.Pessoa.LastName := 'Parse 2'; Person.Pessoa.Age := 20; Person.Pessoa.Salary := 200.20; Person.Imagem := '12345678901234567890'; Person1 := TPersonSub.Create; Person1.Id := 3; Person1.FirstName := 'Json 3'; Person1.LastName := 'Parse 3'; Person1.Age := 30; Person1.Salary := 300.30; Person2 := TPersonSub.Create; Person2.Id := 4; Person2.FirstName := 'Json 4'; Person2.LastName := 'Parse 4'; Person2.Age := 40; Person2.Salary := 400.40; Person.Pessoas.Add(Person1); Person.Pessoas.Add(Person2); TJSONBr.OnSetValue := nil; // Criando seu proprio tratamento de tipos TJSONBr.OnGetValue := nil; // Criando seu proprio tratamento de tipos Memo1.Lines.Text := TJSONBr.ObjectToJsonString(Person); finally Person.Free; end; end;
procedure TTestJSONBr.AddPair_1; var LResult: String; const LJSON = '[{"ID":1,"Name":"Json"},[{"ID":2,"Name":"Json 2"},{"ID":3,"Name":"Json 3"}]]'; begin LResult := TJSONBr .BeginArray .BeginObject .AddPair('ID', 1) .AddPair('Name', 'Json') .EndObject .BeginArray .BeginObject .AddPair('ID', 2) .AddPair('Name', 'Json 2') .EndObject .BeginObject .AddPair('ID', 3) .AddPair('Name', 'Json 3') .EndObject .EndArray .EndArray .ToJSON; end;
procedure TTestJSONBr.AddValue_1; var LResult: String; const LJSON = '{"nome":"Fulano","idade":90,"filmes_preferidos":["Pulp Fiction","Clube da Luta"],"contatos" :{"telefone":"(11)91111-2222","emails":["fulano@gmail.com","fulano@yahoo.com"]}}'; begin LResult := TJSONBr .BeginObject .AddPair('nome', 'Fulano') .AddPair('idade', 90) .AddPairArray('filmes_preferidos', ['Pulp Fiction', 'Clube da Luta']) .BeginObject('contatos') .AddPair('telefone', '(11)91111-2222') .AddPairArray('emails', ['fulano@gmail.com', 'fulano@yahoo.com']) .EndObject .EndObject .ToJSON; end;
✍️ License
⛏️ Contribuição
Nossa 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.
Para enviar uma pull request, siga estas etapas:
- Faça um fork do projeto
- Crie uma nova branch (
git checkout -b minha-nova-funcionalidade) - Faça suas alterações e commit (
git commit -am 'Adicionando nova funcionalidade') - Faça push da branch (
git push origin minha-nova-funcionalidade) - Abra uma pull request