Leitura, concatenação e parse GET HTTP

Prezados,

Estou utilizando meu Ethernet Shield W5100 para dar um GET no meu backend e ter o retorno dos dados armazenados em memória.

Estou tendo sucesso, e o código está retornando um JSON no Serial Monitor conforme esperado:

[{"id":1,"cor":"vermelho","estado":true},{"id":2,"cor":"azul","estado":true}]

Isto posto, ao analisar o retorno total do meu metodo GET, na verdade ele retorna todo o body da requisição:

HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 25 May 2020 00:56:29 GMT

4d
[{"id":1,"cor":"vermelho","estado":true},{"id":2,"cor":"azul","estado":true}]
0

Esse retorno encontra-se dentro do loop do Arduino e é printado dessa forma por um Serial.print(c); básico.

Então, a leitura (GET) está OK, porém eu preciso juntar essas informações, talvez concatena-las, e depois dar um parse para que eu obtenha somente os valores que eu preciso, ID, COR e BOOLEAN.
Irei utilizar o valor do BOOLEAN, para, neste caso, acender ou desligar um LED.

Mas não estou conseguindo cumprir tais objetivos. Gostaria de saber se vocês possuem alguma sugestão para tais "problemas"?

Já tentei usar concat(), porém ao printar, ele vai printando até terminar, vira uma "rampa", porém acho que funciona.
Mas preciso isolar o retorno JSON e seus valores para ativar ou desativar um led com true e false.

Segue o código:

#include <Ethernet.h>
#include <SPI.h>

int Led = 13;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 100, 30 };
byte server[] = { 192, 168, 100, 3 }; // localhost

EthernetClient client;

void setup()
{
  pinMode(Led, OUTPUT);
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 8080)) {
    Serial.println("connected");
    digitalWrite(Led, HIGH);
    client.println("GET /perifericos/ HTTP/1.1");
    client.println("Host: ");
    client.println("Content-Type: application/json");
    client.println();
  } else {
    Serial.println("connection failed");
    digitalWrite(Led, LOW);
  }
}

void loop()
{
  int i = 0;
  
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    digitalWrite(Led, LOW);
    client.stop();
    for (;;)
      ;
  }
}

Agradeço e espero obter ajuda.

Pelo que entendi você não está conseguindo separar as informações necessárias do cabeçalho.
Eu uso a função indexOf, pego a posição inicial do que eu preciso ,e depois "corto" só o que preciso

Já viste o método find()?

Olhando à informação na página do arduino eles não referem que funciona com o Ethernet client, mas como faz parte da classe Stream é provável que funcione. O que a função faz é descartar o que está no buffer até encontrar o que precisas.

Eu procuraria por "id:" e depois fazia o parsing pois sabia que estava no sítio certo e não tinha de lidar com a resposta do servidor.

Pessoal, eu consegui depois que olhei os exemplos da biblioteca ArduinoJson.

Mas obrigado pela ajuda, moderadores por gentileza o topico tá fechado!