serializeJson() accepts a Print&, i.e, a reference to a class that implements the Print interface.
WiFiClient does implement the Print interface, but serializeJson() cannot make a reference to it because ESP8266WebServer::client() returns a temporary. Indeed, C++ forbids references to temporary variables, only const reference to temporaries are allowed.
The code you have that says readString += c has to allocate a whole new string whenever it runs out of space for more characters. All those allocations are filling up memory.
Instead of the String class, use a single C character array, e.g.
that is big enough for whatever you put in it.
If it helps, I wrote a simple arduino web server for ...
Can you make Arduino Uno send information through a WiFi module to a server?
Yes, I can.
The simplest way is through an HTTP "GET" request. Every time you request a web page (and there are plenty of examples of that) you are sending data to the server to tell it both what web page to get (/foo/bar.php) and what data to submit to that web page (?baz=4).