How are blocks verified?

I see in the bitcoin wiki there is something called “script” which compiles down to some bytecode to be run by a very very basic virtual machine. Does this mean that each block is actually just a string/array of bytes when it comes in and is processed by a node? so a block in its “true” format would look something like [0x01, 0x04, 0x0f, 0xa1…. etc. ?

and then the node that recieves the block just puts the bytes into the interpreter to be run by the bitcoin VM?

which is correct? a block is pure bytecode or JSON? what would a bitcoincore node understand when receiving a new block?