diff --git a/search_api.module b/search_api.module
index bc2d28c..108ee65 100644
--- a/search_api.module
+++ b/search_api.module
@@ -2332,6 +2332,11 @@ function search_api_extract_fields(EntityMetadataWrapper $wrapper, array $fields
           // wrapper's value() method returns, when called with "identifier =
           // TRUE", FALSE instead of the (more logical) NULL.
           $is_entity = isset($entity_infos[search_api_extract_inner_type($property_info['type'])]);
+          // Ensure that lists of entities are numerically indexed arrays so
+          // the data converts correctly to JSON arrays.
+          if ($is_entity && is_array($info['value'])) {
+            $info['value'] = array_values($info['value']);
+          }
           if ($is_entity && $info['value'] === FALSE) {
             $info['value'] = NULL;
           }
