Parse Json Para Objeto Java com GSON

Olá Pessoal,

Sou Iniciante no java e peguei um projeto para converter varios JSONs em arquivo TXT. A minha Ideia era transformar o Json em um Objeto JAVA e depois converter o objeto Java em TXT. Mas nada que estou tentando está funcionando, agradeceria muito uma ajuda da comunidade.

O que fiz até agora:
Classe Java para para receber os dados do JSON

public class Items
{
private Areas[] areas;
private String date;
public Areas[] getAreas ()
{
return areas;
}
public void setAreas (Areas[] areas)
{
this.areas = areas;
}

public String getDate ()
{
    return date;
}

public void setDate (String date)
{
    this.date = date;
}

@Override
public String toString()
{
    return "ClassPojo [areas = "+areas+", date = "+date+"]";
}

}
No total são 5 classes com esse acima.

Fiz varias tentativa para ler o JSON, primeira classe main que fiz foi essa porque parecia mais fácil:

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

import com.google.gson.Gson;

public class Test {

public static void main(String[] args) {

	Gson gson = new Gson();

	try {

		BufferedReader br = new BufferedReader(new FileReader("C:/Users/614952/Desktop/Projeto_Claro/MyJsonFile/PAINEL_DE_COTAS_01.json"));

		Items obj = gson.fromJson(br, Items.class);

		System.out.println(obj);

	} catch (IOException e) {
		e.printStackTrace();
	}

}

}
O problema aqui é que obj retorna nulo:

Fiz essa também de um tuturial:

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Map;

import org.junit.Assert;
import org.junit.Test;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class JsonPaserFile {

@Test
public void testParseJson() {
	JsonParser parser = new JsonParser();
	InputStream inputSteam = getClass().getClassLoader().getResourceAsStream("sample.json");
	Reader reader = new InputStreamReader(inputSteam);
	// JsonElement rootElement = parser.parse(reader);
	JsonElement rootElement = parser.parse(reader);
	Assert.assertNotNull(rootElement);
	JsonObject rootObject = rootElement.getAsJsonObject();
	JsonObject itens = rootObject.getAsJsonObject("items").getAsJsonObject("date");
	JsonArray array = null;
	for (Map.Entry<String, JsonElement> entry : itens.entrySet()) {
		JsonObject entryObject = entry.getValue().getAsJsonObject();
		array = entryObject.getAsJsonArray("items");
		// Assert.assertNotNull(array);
	}
	Assert.assertEquals(4, array.size());

}

}

Nesse caso o problema é esse aqui:

JsonPaserFile (Failed Tests first)
br.com.claro.json.JsonPaserFile
testParseJson(br.com.claro.json.JsonPaserFile)
java.lang.ClassCastException: com.google.gson.JsonArray cannot be cast to com.google.gson.JsonObject

** at com.google.gson.JsonObject.getAsJsonObject(JsonObject.java:205)**

** at br.com.claro.json.JsonPaserFile.testParseJson(JsonPaserFile.java:26)**

** at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)**

** at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)**

** at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)**

** at java.lang.reflect.Method.invoke(Unknown Source)**

** at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)**

** at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)**

** at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)**

** at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)**

** at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)**

** at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)**

** at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)**

** at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)**

** at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)**

** at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)**

** at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)**

** at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)**

** at org.junit.runners.ParentRunner.run(ParentRunner.java:363)**

** at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)**

** at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)**

** at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)**

** at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)**

** at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)**

** at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)**

Os dados chegam até : JsonObject itens = rootObject.getAsJsonObject(“items”).getAsJsonObject(“date”);

Dai gerar o erro.

Eu acho que o primeiro exemplo usando GSON é mais fácil de fazer se puder ajudar eu agradeço muito!

Um dos Json que estava testando é esse aqui:
{
“items”: [
{
“date”: “2018-04-24”,
“areas”: [
{
“label”: “BK01”,
“calendar”: {
“count”: [
0
]
},
“categories”: [
{
“label”: “CLASSE1”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2_PME”,
“calendar”: {
“count”: [
0
]
}
}
]
},
{
“label”: “BK02”,
“calendar”: {
“count”: [
0
]
},
“categories”: [
{
“label”: “CLASSE1”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2_PME”,
“calendar”: {
“count”: [
0
]
}
}
]
},
{
“label”: “BK03”,
“calendar”: {
“count”: [
0
]
},
“categories”: [
{
“label”: “CLASSE1”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2_PME”,
“calendar”: {
“count”: [
0
]
}
}
]
},
{
“label”: “BK04”,
“calendar”: {
“count”: [
0
]
},
“categories”: [
{
“label”: “CLASSE1”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2_PME”,
“calendar”: {
“count”: [
0
]
}
}
]
},
{
“label”: “GBH - Todas as \u00c1reas”,
“calendar”: {
“count”: [
0
]
},
“categories”: [
{
“label”: “CLASSE1”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE2”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE3”,
“calendar”: {
“count”: [
0
]
}
},
{
“label”: “CLASSE6”,
“calendar”: {
“count”: [
0
]
}
}
]
}
]
}
]
}

@Marcio_Correa
Boa noite amigo.
Você tem que estruturar as classes corretamente para que o parse seja realizado e também recomendo que use TypeToken para fazer este processo.

import java.util.List;

public class JsonObj {

    private List<Items> items;

    public JsonObj() {
    }

    public List<Items> getItems() {
        return items;
    }

    public void setItems(List<Items> items) {
        this.items = items;
    }

    @Override
    public String toString() {
        return "JsonObj{" +
                "items=" + items +
                '}';
    }

} 

import java.util.List;

public class Items {

    private String date;
    private List<Areas> areas;

    public Items() {
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public List<Areas> getAreas() {
        return areas;
    }

    public void setAreas(List<Areas> areas) {
        this.areas = areas;
    }

    @Override
    public String toString() {
        return "Items{" +
                "date='" + date + '\'' +
                ", areas=" + areas +
                '}';
    }

}

import java.util.List;

public class Areas {

    private String label;
    private Calendar calendar;
    private List<Categories> categories;

    public Areas() {
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public Calendar getCalendar() {
        return calendar;
    }

    public void setCalendar(Calendar calendar) {
        this.calendar = calendar;
    }

    public List<Categories> getCategories() {
        return categories;
    }

    public void setCategories(List<Categories> categories) {
        this.categories = categories;
    }

    @Override
    public String toString() {
        return "Areas{" +
                "label='" + label + '\'' +
                ", calendar=" + calendar +
                ", categories=" + categories +
                '}';
    }
}

import java.util.List;

public class Calendar {

    private List<Integer> count;

    public Calendar() {
    }

    public List<Integer> getCount() {
        return count;
    }

    public void setCount(List<Integer> count) {
        this.count = count;
    }

    @Override
    public String toString() {
        return "Calendar{" +
                "count=" + count +
                '}';
    }

}

public class Categories {

    private String label;
    private Calendar calendar;

    public Categories() {
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public Calendar getCalendar() {
        return calendar;
    }

    public void setCalendar(Calendar calendar) {
        this.calendar = calendar;
    }

    @Override
    public String toString() {
        return "Categories{" +
                "label='" + label + '\'' +
                ", calendar=" + calendar +
                '}';
    }

}

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {

    public static void main(String[] args){
        Gson gson = new Gson();
        try {
            BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Villagram\\Desktop\\PAINEL_DE_COTAS_01.txt"));
            JsonObj obj = gson.fromJson(br, new TypeToken<JsonObj>(){}.getType());
            System.out.println(obj.toString());
            String json = gson.toJson(obj);
            System.out.println(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Mesmo tanto tempo depois a resposta ainda pode ajudar outras pessoas.

Saídas:

 //toString do Objeto parseado
 JsonObj{items=[Items{date='2018-04-24', areas=[Areas{label='BK01', calendar=Calendar{count=[0]}, categories=[Categories{label='CLASSE1', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2_PME', calendar=Calendar{count=[0]}}]}, Areas{label='BK02', calendar=Calendar{count=[0]}, categories=[Categories{label='CLASSE1', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2_PME', calendar=Calendar{count=[0]}}]}, Areas{label='BK03', calendar=Calendar{count=[0]}, categories=[Categories{label='CLASSE1', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2_PME', calendar=Calendar{count=[0]}}]}, Areas{label='BK04', calendar=Calendar{count=[0]}, categories=[Categories{label='CLASSE1', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2_PME', calendar=Calendar{count=[0]}}]}, Areas{label='GBH - Todas as Áreas', calendar=Calendar{count=[0]}, categories=[Categories{label='CLASSE1', calendar=Calendar{count=[0]}}, Categories{label='CLASSE2', calendar=Calendar{count=[0]}}, Categories{label='CLASSE3', calendar=Calendar{count=[0]}}, Categories{label='CLASSE6', calendar=Calendar{count=[0]}}]}]}]}
 //Objeto serializado para json novamente
 {"items":[{"date":"2018-04-24","areas":[{"label":"BK01","calendar":{"count":[0]},"categories":[{"label":"CLASSE1","calendar":{"count":[0]}},{"label":"CLASSE2","calendar":{"count":[0]}},{"label":"CLASSE2_PME","calendar":{"count":[0]}}]},{"label":"BK02","calendar":{"count":[0]},"categories":[{"label":"CLASSE1","calendar":{"count":[0]}},{"label":"CLASSE2","calendar":{"count":[0]}},{"label":"CLASSE2_PME","calendar":{"count":[0]}}]},{"label":"BK03","calendar":{"count":[0]},"categories":[{"label":"CLASSE1","calendar":{"count":[0]}},{"label":"CLASSE2","calendar":{"count":[0]}},{"label":"CLASSE2_PME","calendar":{"count":[0]}}]},{"label":"BK04","calendar":{"count":[0]},"categories":[{"label":"CLASSE1","calendar":{"count":[0]}},{"label":"CLASSE2","calendar":{"count":[0]}},{"label":"CLASSE2_PME","calendar":{"count":[0]}}]},{"label":"GBH - Todas as Áreas","calendar":{"count":[0]},"categories":[{"label":"CLASSE1","calendar":{"count":[0]}},{"label":"CLASSE2","calendar":{"count":[0]}},{"label":"CLASSE3","calendar":{"count":[0]}},{"label":"CLASSE6","calendar":{"count":[0]}}]}]}]}