Parse a json from the library of ArduinoJson version 6 using sim800l modem

Hello,
As mention above I am trying to parse a json from a mock server using AT command.
I am getting invalid input but the json is printed ok when I use serial.readString().

Here is the full code:

#include <SoftwareSerial.h>
#include <ArduinoJson.h>
#include <StreamUtils.h>

SoftwareSerial mySerial(13, 12); 

void setup()
{
  Serial.begin(9600);

  mySerial.begin(9600);
  
  Serial.println("Begin..."); 
  delay(10000);

  mySerial.println("AT");
  updateSerial();
  mySerial.println("AT+CSQ");
  updateSerial();
  mySerial.println("AT+CCID");
  updateSerial();
  mySerial.println("AT+CREG?");
  updateSerial();
  mySerial.println("AT+CGREG?");
  updateSerial();
  
  //SEND SMS
//    mySerial.println("AT+CMGF=1");
//    updateSerial();
//    mySerial.println("AT+CMGS=\"+972524420370\"");
//    updateSerial();
//    mySerial.print("SHEEN | MA KORE?");
//    updateSerial();
//    mySerial.write(26);
  delay(500);
  mySerial.println("AT+CGATT=1");
  updateSerial(); 
  mySerial.println("AT+SAPBR=3,1,CONTYPE,GPRS");
  updateSerial();
  mySerial.println("AT+SAPBR=3,1,\"APN\",\"" + String("we") + "\"");
  updateSerial();
  
  mySerial.println("AT+SAPBR=1,1");
  updateSerial();
  
  mySerial.println("AT+SAPBR=2,1");
  updateSerial();
  
  mySerial.println("AT+HTTPINIT");
  updateSerial();
  mySerial.println("AT+HTTPPARA=\"CID\",1");
  updateSerial();

  mySerial.println("AT+HTTPPARA=URL,http://jsonplaceholder.typicode.com/todos/1");
  updateSerial();
  
  mySerial.println("AT+HTTPPARA=CONTENT,application/json");
  updateSerial();

  mySerial.println(F("AT+IPR=9600"));
  updateSerial();

  mySerial.println("AT+HTTPACTION=0");
  updateSerial();
  delay(5000);
  
  mySerial.println("AT+HTTPREAD");
  readSerial();

  mySerial.println("AT+HTTPTERM");
  updateSerial();
}

void readSerial() {
  while(mySerial.available()) 
  {
    String data = mySerial.readString();
    Serial.print(data);
    DynamicJsonDocument doc(256);
    DeserializationError error = deserializeJson(doc, data);

    if (error) {
      Serial.print("ERROR PARSING! ");
      Serial.println(error.c_str());
    }
    const char* userID = doc["title"].as<char*>();
    int id = doc["userId"].as<int>();
    Serial.println(userID);
    Serial.println(id);
    delay(1000);
  }
  
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());
  }
}

The logs:

AT

OK
AT+CSQ

+CSQ: 31,0

OK
AT+CCID

89972096000004790522

OK
AT+CREG?

+CREG: 0,1

OK
AT+CGREG?

+CGREG: 0,1

OK
AT+CGATT=1

OK
AT+SAPBR=3,1,CONTYPE,GPRS

OK
AT+SAPBR=3,1,"APN","we"

OK
AT+SAPBR=1,1

ERROR
AT+SAPBR=2,1

+SAPBR: 1,1,"100.105.195.133"

OK
AT+HTTPINIT

OK
AT+HTTPPARA="CID",1

OK
AT+HTTPPARA=URL,http://jsonplaceholder.typicode.com/todos/1

OAT+HTTPPARA=CONTENT,application/json

OK
AT+IPR=9600

OK
AT+HTTPACTION=0

OK

+HTTPACTION: 0,200,83
AT+HTTPREAD

+HTTPREAD: 83
{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}
OK
ERROR PARSING! InvalidInput

0
AT+HTTPTERM

OK

Did anyone try to make this work?

Thanks,