diff --git a/internal/internal.go b/internal/internal.go
index fc55ba5294a5fab82f06c4cd0bdc5f9c3518e452..8b0b33a4157b753c5dd9b817d5c7af496059f0b0 100644
--- a/internal/internal.go
+++ b/internal/internal.go
@@ -5,6 +5,7 @@ import (
 	"errors"
 	"fmt"
 	"os"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -49,9 +50,17 @@ func (f *JSONFlattener) FlattenJSON(
 				return err
 			}
 		}
+	case []interface{}:
+		for i, v := range t {
+			k := strconv.Itoa(i)
+			err := f.FlattenJSON(fieldname+"_"+k+"_", v)
+			if err != nil {
+				return nil
+			}
+		}
 	case float64:
 		f.Fields[fieldname] = t
-	case bool, string, []interface{}, nil:
+	case bool, string, nil:
 		// ignored types
 		return nil
 	default:
diff --git a/plugins/inputs/elasticsearch/testdata_test.go b/plugins/inputs/elasticsearch/testdata_test.go
index 03e512f815a76fe05767758708d9e79da946b347..bca1f9e45beff7964f9ce251320e989ae4f3530f 100644
--- a/plugins/inputs/elasticsearch/testdata_test.go
+++ b/plugins/inputs/elasticsearch/testdata_test.go
@@ -562,6 +562,9 @@ var indicesExpected = map[string]interface{}{
 }
 
 var osExpected = map[string]interface{}{
+	"load_average_0":           float64(0.01),
+	"load_average_1":           float64(0.04),
+	"load_average_2":           float64(0.05),
 	"swap_used_in_bytes":       float64(0),
 	"swap_free_in_bytes":       float64(487997440),
 	"timestamp":                float64(1436460392944),
@@ -724,10 +727,13 @@ var threadPoolExpected = map[string]interface{}{
 }
 
 var fsExpected = map[string]interface{}{
-	"timestamp":                float64(1436460392946),
-	"total_free_in_bytes":      float64(16909316096),
-	"total_available_in_bytes": float64(15894814720),
-	"total_total_in_bytes":     float64(19507089408),
+	"data_0_total_in_bytes":     float64(19507089408),
+	"data_0_free_in_bytes":      float64(16909316096),
+	"data_0_available_in_bytes": float64(15894814720),
+	"timestamp":                 float64(1436460392946),
+	"total_free_in_bytes":       float64(16909316096),
+	"total_available_in_bytes":  float64(15894814720),
+	"total_total_in_bytes":      float64(19507089408),
 }
 
 var transportExpected = map[string]interface{}{
diff --git a/plugins/inputs/exec/exec_test.go b/plugins/inputs/exec/exec_test.go
index d3e54429dbb876cfd98395348082b12d0c2daf1f..64fd69fce5f03a1331dd9eaddd3ba8392ec3626e 100644
--- a/plugins/inputs/exec/exec_test.go
+++ b/plugins/inputs/exec/exec_test.go
@@ -59,13 +59,17 @@ func TestExec(t *testing.T) {
 	var acc testutil.Accumulator
 	err := e.Gather(&acc)
 	require.NoError(t, err)
-	assert.Equal(t, acc.NFields(), 4, "non-numeric measurements should be ignored")
+	assert.Equal(t, acc.NFields(), 8, "non-numeric measurements should be ignored")
 
 	fields := map[string]interface{}{
 		"num_processes": float64(82),
 		"cpu_used":      float64(8234),
 		"cpu_free":      float64(32),
 		"percent":       float64(0.81),
+		"users_0":       float64(0),
+		"users_1":       float64(1),
+		"users_2":       float64(2),
+		"users_3":       float64(3),
 	}
 	acc.AssertContainsFields(t, "exec", fields)
 }
diff --git a/plugins/inputs/httpjson/httpjson_test.go b/plugins/inputs/httpjson/httpjson_test.go
index 7e9ffd331245294c2ef7537724a8b95853a5c744..dbc8183443e46da9876516d05d6a0f0eb0f6e8a9 100644
--- a/plugins/inputs/httpjson/httpjson_test.go
+++ b/plugins/inputs/httpjson/httpjson_test.go
@@ -19,12 +19,12 @@ const validJSON = `
 		},
 		"ignored_null": null,
 		"integer": 4,
-		"ignored_list": [3, 4],
+		"list": [3, 4],
 		"ignored_parent": {
-			"another_ignored_list": [4],
 			"another_ignored_null": null,
 			"ignored_string": "hello, world!"
-		}
+		},
+		"another_list": [4]
 	}`
 
 const validJSONTags = `
@@ -35,8 +35,11 @@ const validJSONTags = `
 	}`
 
 var expectedFields = map[string]interface{}{
-	"parent_child": float64(3),
-	"integer":      float64(4),
+	"parent_child":   float64(3),
+	"list_0":         float64(3),
+	"list_1":         float64(4),
+	"another_list_0": float64(4),
+	"integer":        float64(4),
 }
 
 const invalidJSON = "I don't think this is JSON"
@@ -123,7 +126,7 @@ func TestHttpJson200(t *testing.T) {
 		var acc testutil.Accumulator
 		err := service.Gather(&acc)
 		require.NoError(t, err)
-		assert.Equal(t, 4, acc.NFields())
+		assert.Equal(t, 10, acc.NFields())
 		for _, srv := range service.Servers {
 			tags := map[string]string{"server": srv}
 			mname := "httpjson_" + service.Name