Baseado nos cursos da Softblue
O Formato JSON
• Formato de troca de dados
– Muito usado em web services e outras aplicações que se comunicam pela internet
• Inspirado no JavaScript
– JavaScript Object Notation
• Baseado em texto
• Possui 2 estruturas de dados
– Objetos {}
• Conjunto de pares de chave e valor
– Arrays []
• Lista de valores
• Possui 2 tipos de dados
– string
– number
• JSON x XML
– JSON é mais compacto
– XML possui recursos para validação de dados (XML Schema e DTD)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"nome": "João",
"sobrenome": "Alencar",
"idade": 33,
"endereco" : {
"rua" : "Rua. dos Limões",
"numero" : 200,
"cidade" : "São Paulo"
},
"telefones": [
{ "Celular": "22 2222-2222" },
{ "Residencial": "11 1111-1111" }
]
}
JSON-P
• API do Java EE para processamento de documentos JSON (geração e parsing)
• 2 APIs
– Object Model API
• Cria uma árvore do documento inteiro em memória
– Streaming API
• Baseado em eventos
JSON-P: Object Model API
• Criar um documento JSON
1
2
3
4
5
6
7
JsonObject rootObj = Json.createObjectBuilder()
.add("nome", "João Almeida")
.add("idade", 30)
.add("endereco", Json.createObjectBuilder()
.add("rua", "Rua dos Abacates")
.add("numero", 50).build()
.build();
• Gravar em uma saída
1
2
3
4
5
StringWriter out = new StringWriter();
try (JsonWriter jsonWriter = Json.createWriter(out)) {
jsonWriter.writeObject(rootObj);
}
• Parse de um documento JSON
1
2
3
4
5
6
7
JsonObject rootObj;
StringReader in = new StringReader(jsonStr));
try (JsonReader jsonReader = Json.createReader(in)) {
rootObj = jsonReader.readObject();
}
String nome = rootObj.getString("nome");
int idade = rootObj.getInt("idade");
JSON-P: Streaming API
• Criar um documento JSON
1
2
3
4
5
6
7
8
9
10
11
StringWriter out = new StringWriter();
try (JsonGenerator g = Json.createGenerator(out)) {
g.writeStartObject()
.write("nome", "Pedro Silva")
.write("idade", 32)
.writeStartObject("endereco")
.write("rua", "Rua do Java")
.write("numero", 100)
.writeEnd()
.writeEnd();
}
• Parse de um documento JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JsonParser parser = Json.createParser(new StringReader(jsonStr));
while (parser.hasNext()) {
Event event = parser.next();
switch (event) {
case KEY_NAME: /* ... */ break;
case VALUE_STRING: /* ... */ break;
case VALUE_NUMBER: /* ... */ break;
case VALUE_TRUE: /* ... */ break;
case VALUE_FALSE: /* ... */ break;
case VALUE_NULL: /* ... */ break;
case START_ARRAY: /* ... */ break;
case END_ARRAY: /* ... */ break;
case START_OBJECT: /* ... */ break;
case END_OBJECT: /* ... */ break;
}
}
Object Model API x Streaming API
• Object Model API
– Vantagens
• Manipulação dos dados é mais fácil e intuitiva
– Desvantagem
• É mais lenta e ocupa mais memória
• Streaming API
– Vantagem
• E mais rápida e não ocupa tanta memória
– Desvantagem
• A manipulação dos dados é pouco intuitiva e mais complexa