How can I retrieve the value of a field in a flagging?
According to the Flag API

flagging_load


  Loads a flagging entity. Parameters
  
  $flagging_id: The 'flagging_id' database serial column.
  
  $reset: Whether to reset the DrupalDefaultEntityController cache.
  Return value
  
  The entity object, or FALSE if it can't be found


Therefore something like this might work:

$flaggings = flag_get_user_flags('node', $node-&gt;nid);
if (isset($flaggings['spam'])) {
    $flagging = flagging_load($flaggings['spam']-&gt;flagging_id);
}


You will then find your field in:

$flagging-&gt;field_reason