So far we have Microdata, RDFa and JSON-LD.
I'll cover Microdata and RDFa in same because they're similar. So they both are addition to HTML attributes indicating what Schema.org field names correspond with what user-visible text on the page. Works perfect but need lot of developer work and designer changes. Because both backend (admin interface) and frontend (HTML) must be changed. And there are many issues that can be messed - incorrect implementation, "rich snippet spam", software bugs, etc. Look easy as 1-2-3 but in reality it's pain (PIA) for implementation and support. Example - only product implementation require in backend least 10 edit boxes if they're manual filled.
JSON-LD - it's relative new protocol based on Schema.org. The main benefit is that you split representation layer (HTML) from semantic layer (JSON-LD). In prev. formats - they're same and linked each other. Now they're split. This give you much more freedom than before. You can place HTML data whatever you wish and just add hidden JSON in head or in content that will add semantic marking. This is future (for now).
If you wish to read more about creation of JSON-LD then this article is for you:
http://manu.sporny.org/2014/json-ld-origins-2/
