Converter um JSON em Array?

9 respostas
jsonjavaarray
FearX

Gostaria de saber como posso fazer para transformar em json em um array.
O caso é o seguinte: Eu envio um JSON por post para um HttpServer. Ele le linha por linha, e concatena numa String chamada TextReceived. Ai fica um String gigante, certo? Eu precisava transformar isso num array, para depois jogar num banco de dados.

NOTA: Estou usando o Json Jackson!

public void handle(HttpExchange he) throws IOException {
			Headers h = he.getResponseHeaders();
			h.add("Access-Control-Allow-Origin", "*");
			h.add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
			Map<String, Object> parameters = new HashMap<String, Object>();
			InputStreamReader isr = new InputStreamReader(he.getRequestBody(), "utf-8");
			BufferedReader br = new BufferedReader(isr);
			String response = "sucess";
			String thisLine = "";
			String TextReceived = "";
			while ((thisLine = br.readLine()) != null) {
				TextReceived += thisLine;
			}
	System.out.println(TextReceived); 
			he.sendResponseHeaders(200, response.length());
			OutputStream os = he.getResponseBody();
			os.write(response.toString().getBytes());
			os.close();
		}
	}

Eu já tentei esses métodos para conversão, porém, não rolou

//ObjectMapper objectMapper = new ObjectMapper();
//TypeFactory typeFactory = objectMapper.getTypeFactory();
		// Método 1 - Não retorna resposta (There was an error connecting to localhost)
		// List<dataHandler> dataHandlerList = objectMapper.readValue(TextReceived, new
		// TypeReference<List<dataHandler>>() { } ) ;
		// System.out.println(dataHandlerList);
		// Método 2 - Não retorna resposta (There was an error connecting to localhost)
		// List<dataHandler> dataHandlerList = objectMapper.readValue(TextReceived,
		// typeFactory.constructCollectionType(List.class, dataHandler.class));
		// System.out.println(dataHandlerList);
		//Método 3 -  Não retorna resposta (There was an error connecting to localhost)
		//dataHandler[] server = objectMapper.readValue(TextReceived, typeFactory.defaultInstance().constructArrayType(dataHandler.class));
		//System.out.println(server);

9 Respostas

Lucas_Camara

Dê uma olhada no Gson

darlan_machado

Independente de jackson ou do que for, se você serializar os objetos com Gson, pode deserializar direto, sem ter que ser quebrado em um array.

FearX

Serializar seria o “transformar objetos Java em json”?

darlan_machado

Isso.

FearX

No caso de ter montado os Jsons com por um builder, eu não estaria serializando ele, né? Ou seria serializar ainda?
Eu fiz assim, aí esse Json que eu tenho que converter em array contém quatro Jsons dentro

darlan_machado

Depende. Eu não sei como estes builders estão construídos, o que devolvem.

Lucas_Camara

manda ai um exemplo do json que vc vai transformar.

FearX
{
    "jsonrecebido": "",
    "cpuInfo": {
        "pacote:": "cpu",
        "modelo": "Core(TM) i5-2400 CPU @ 3.10GHz",
        "clock": 3400,
        "nucleos": 4,
        "uptime": "Uptime: 1 dias, 22 horas, 49 minutos,39 segundos.",
        "usodacpu": 25.238094
    },
    "raminfo": {
        "pacote:": "ram",
        "livre": "5,77GB",
        "total": "11,69GB",
        "uso": "5,92GB",
        "porcentagemdeuso": 50.643173
    },
    "hddinfo": {
        "pacote:": "hds",
        "particoes": [{
            "unidade": "/",
            "tipodeparticao": null,
            "sistema": "Linux",
            "espacototal": "457,45GB",
            "espacoutilizavel": "412,86GB",
            "porcentagemdeuso": 9.747737
        }]
    },
    "netinfo": {
        "pacote:": "net",
        "gateway": "172.17.0.254",
        "hostname": "leon-System-Product-Name",
        "dominio": "(none)",
        "dns": "127.0.0.53",
        "ips": [{
            "ip": "172.17.199.255"
        }]
    }
}

No final, tenho 4 Jsons dentro de 1 json que tá sendo enviado

Lucas_Camara

Para converter essa estrutura para objetos java, vc deve criar as classes que vão representar essa estrutura e depois usar o Gson para fazer o trabalho:

public class ObjetoRoot {
	private String jsonrecebido;
	private CpuInfo cpuInfo;
	private Raminfo raminfo;
	private Hddinfo hddinfo;
	private Netinfo netinfo;
	
	/*
	 * Importante! Cada classe que compõem a classe ObjetoRoot (CpuInfo, RamInfo, HddInfo e NetInfo),
	 * deve ser criada respeitando os nomes dos atributos do json de cada uma
	 */
	
	// getters and setters
}

e para converter com Gson:

ObjetoRoot obj = gson.fromJson(seuJsonString, ObjetoRoot.class);
Criado 6 de junho de 2018
Ultima resposta 6 de jun. de 2018
Respostas 9
Participantes 3