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
Embarcadero Delphi XE e superior.
Instalação usando o [boss install
]
boss install "https://github.com/HashLoad/jsonbr"
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":["[email protected]","[email protected]"]}}';
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', ['[email protected]', '[email protected]'])
.EndObject
.EndObject
.ToJSON;
end;
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