Serialização

Objeto Leitura de Sensor


In [1]:
import java.util.Date;

public class SensorReading {
   private Date timestamp;
   private String dimension;
   private double value;
   private String unity;
   
   public SensorReading() {
      /* nothing */
   }
   
   public SensorReading(Date timestamp, String dimension, double value, String unity) {
      this.timestamp = timestamp;
      this.dimension = dimension;
      this.value = value;
      this.unity = unity;
   }

   public Date getTimestamp() {
      return timestamp;
   }
   
   public void setTimestamp(Date timestamp) {
      this.timestamp = timestamp;
   }
   
   public String getDimension() {
      return dimension;
   }
   
   public void setDimension(String dimension) {
      this.dimension = dimension;
   }
   
   public double getValue() {
      return value;
   }
   
   public void setValue(double value) {
      this.value = value;
   }
   
   public String getUnity() {
      return unity;
   }
   
   public void setUnity(String unity) {
      this.unity = unity;
   }
    
   public String toString() {
      return "time stamp: " + timestamp +
             "\ndimension: " + dimension +
             "\nvalue: " + value +
             "\nunity: " + unity;
   }
}


Out[1]:
com.twosigma.beaker.javash.bkrfac5f6cf.SensorReading

Serializando em XML


In [2]:
import java.util.Date;
import java.util.Calendar;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

Date today = Calendar.getInstance().getTime();
SensorReading sensor = new SensorReading(today, "temperature", 25, "centigrades");

try {
    XMLEncoder encoder = new XMLEncoder(
            new BufferedOutputStream(
                    new FileOutputStream("temperature.xml") ) );
    encoder.writeObject(sensor);
    encoder.close();

    System.out.println("Objeto gravado com sucesso!");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}


Objeto gravado com sucesso!
Out[2]:
null

Deserializando em XML


In [3]:
import java.util.Date;
import java.util.Calendar;
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

try {
    XMLDecoder decoder = new XMLDecoder(
            new BufferedInputStream(
                    new FileInputStream("temperature.xml") ) );

    SensorReading sensor = (SensorReading)decoder.readObject();
    decoder.close();

    System.out.println(sensor);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}


time stamp: Fri Aug 23 14:28:50 GMT 2019
dimension: temperature
value: 25.0
unity: centigrades
Out[3]:
null

Serializando em JSON


In [4]:
%classpath add jar ../../../../../src/lib/genson-1.6.jar



In [5]:
import java.util.Date;
import java.util.Calendar;

import java.text.SimpleDateFormat;

import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;

import java.io.FileWriter;
import java.io.IOException;

Date today = Calendar.getInstance().getTime();
SensorReading sensor = new SensorReading(today, "temperature", 25, "centigrades");

try {
   Genson genson = new GensonBuilder()
     .useDateFormat(new SimpleDateFormat("yyyy-MM-dd"))
     .useIndentation(true)
     .useConstructorWithArguments(false)
   .create();

   String json = genson.serialize(sensor);
   System.out.println(json);    

   FileWriter arquivo = new FileWriter("temperature.json");
   arquivo.write(json);
   arquivo.close();
} catch (IOException e) {
    e.printStackTrace();
}


{
  "dimension":"temperature",
  "timestamp":1566570532374,
  "unity":"centigrades",
  "value":25.0
}
Out[5]:
null

Deserializando em JSON


In [6]:
import java.util.Date;
import java.util.Calendar;

import java.text.SimpleDateFormat;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;

try {
    FileReader arquivo = new FileReader("temperature.json");
    BufferedReader formatado = new BufferedReader(arquivo);

    String json = "";
    String linha = formatado.readLine();
    while (linha != null) {
        json += linha + "\n";
        System.out.println(linha);
        linha = formatado.readLine();
    }
    arquivo.close();

    Genson genson = new GensonBuilder()
      .useDateFormat(new SimpleDateFormat("yyyy-MM-dd"))
      .useIndentation(true)
      .useConstructorWithArguments(false)
      .create();

    SensorReading sensor = genson.deserialize(json, SensorReading.class);
    System.out.println(sensor);
} catch (IOException erro) {
    erro.printStackTrace();
}


{
  "dimension":"temperature",
  "timestamp":1566570532374,
  "unity":"centigrades",
  "value":25.0
}
time stamp: Fri Aug 23 14:28:52 GMT 2019
dimension: temperature
value: 25.0
unity: centigrades
Out[6]:
null

Exercício

Considere três sensores de temperatura:

SensorReading sensor[] = {new SensorReading(today, "temperature", 25, "centigrades"),
                          new SensorReading(today, "temperature", 28, "centigrades"),
                          new SensorReading(today, "temperature", 26, "centigrades")};

Realize a gravação desses três sensores em um único arquivo JSON.


In [ ]:

Exercício

Faça a leitura do arquivo JSON que você gravou no exercício anterior e grave na forma de um arquivo Comma-Separated Values (CSV).


In [ ]:

Exercício

Considere uma das bases de saúde daquelas selecionadas em sala de aula.

  1. Encontre alguma que exporte seus dados em JSON.
  2. Registe na primeira célula abaixo o título e link da base.
  3. Exporte um conjunto de dados da base selecionada em JSON e faça upload no Jupyter.
  4. Escreva um código em Java na segunda célula abaixo que realize a conversão dos dados para CSV.

In [ ]: