Cannot execute this cypher code

I am trying to execute this code. Can someone please help me understand as to why it is giving an error and how do I fix this ?

CREATE (n:Person {name: 'John', age: 30})
MATCH (n:Person {name: 'John'})
SET n.address.street = '123 Main St'

Neo4j does not support a map as a property type. Properties can only be primitive types or a homogeneous list of primitive values. In your 'set n.address.street', you are trying to set the street properties on the address property. This is not allowed. You will need to set individual properties for each of the street's components, such as, address, city, state, zipCode.

As a comment, there is no need to match for the Person node with name 'John' if the you expect the only result to be the node you created. You can just refer to that one with the binding variable 'n'. Further, you could set the address for the 'John' node in the create itself, as you did with the age.

As another note, you will need a 'with' statement between a 'create' and 'match' statements.