The products value isn't just a string, it's a json encoded array, inside a json encoded object. You've got double encoding going on.. so you need to json decode products, before you json encode the results.
Is products stored in the DB as json? or json encoded data? If so, you probably want to add an accessor to json decode it.. something like this:
public function getProductsAttribute($value) {
return json_decode($value);
}