The first declaration declares two objects John and Jason of unnamed structure.
The second declaration declares two typedef names John and Jason for an unnamed structure.
The third declaration declares a structure with tag person. Then two objects John and Jason of type struct person are created.
1) The first one creates an unnamed structure. Two instances of that unnamed structure are then declared. The region between the closing brace and the semi-colon is the only declaration context associated with the unnamed structure. After the only declarative region has passed, no more instances of the unnamed structure can be made simply because the compiler needs a type-identifier to create an instance.
2) Initially, the members are declared. After the declaration of all members, the unnamed structure is then assigned an identifier. In this particular case, two structures, "John" and "Jason", are declared. Typically, the region in which "John" and "Jason" are declared is used to declare instances of the structure as stated above. In this case, it's used to introduce type-names.
(3) This creates a structure named "person". Further on, two instances of "person", "John" and "Jason", are declared into the current scope.