diff --git a/views_json.module b/views_json.module
index c5230b5..bf73485 100644
--- a/views_json.module
+++ b/views_json.module
@@ -154,7 +154,19 @@ function _views_json_render_fields($view, $row) {
     }
     else {
       $field_output = $view->field[$field->options['id']]->advanced_render($row);
-      $field_raw = (isset($view->field[$id]->field_alias) && isset($row->{$view->field[$id]->field_alias})) ? $row->{$view->field[$id]->field_alias} : NULL;
+      if ($view->field[$id]->real_field == $id) {
+        // Pick up the value directly from the row if the field is the same as
+        // its real field e.g. nid or title.
+        $field_raw = $row->{$view->field[$id]->field_alias};
+      }
+      else {
+        // Pick up the raw value.
+        $field_id = "field_{$id}";
+        // We have to treat taxonomy specially like image below.
+        $field_raw = ($field->field_info['type'] == 'taxonomy_term_reference')
+          ? $row->{$field_id}[0]['raw']['taxonomy_term']->name
+          : $row->{$field_id}[0]['raw']['value'];
+      }
       // Check if this is field is the entity's label.
       if (empty($field->base_table)) {
         $entity_info = entity_get_info($field->table);
