Completely untested, but a possibility would be to define your content attribute like so:
return array(AttributeType::Mixed, 'model' => 'MyPluginContentModel');
When Craft pulls the JSON from the database, it should decode it and populate your model with any matching attributes it finds.
That gets returned to your template and you can access it via {{ value.id }}
.