You are repeatedly overwriting the ssid property of the same object.
Instead, you want to write different properties, like
wifiJsonObject["ssid" + String(i+1)] = WiFi.SSID(i);
Then, only serialize the document once, when it is complete.
That being said, I strongly concur with Juraj in that the correct way to
represent a list in JSON (and wifiList is ...
I don't think anything in your code is going to work.
you are asking the serial.Read to return an integer if it is working. You might want to change that to a Boolean.
You are asking for a 1 and only a 1 to make your next if statement true. If the serial.Read is working the chance it will only return a one, I think is very low
Currently you are shifting in the button states and directly shifting them out again to the LEDs. Thus the state of the LEDs follows exactly the state of the buttons.
As jsotola explained in the comments, you need to seperate what you get as input (buttons and serial) from what you set as output. For this you need 1 or more variables to hold the state of ...