How to split nested fields into separate events?

Example of incoming nested data below.
Ultimately, I want logstash to submit 9 events for this single object. 1 of type storage 2 of type volume 3 of type share and 3 of type client
I'm looking for something like the split filter, but that works on arrays of objects.

{
    '@metadata': {"type": "storage"},
    "type": "storage",
    "name":  "chassis3",
    "location": "Chicago",
    "total_files": 2000000,
    "total_capacity": 300,
    "volumes": [
        {
            "name": "vol1",
            "available": 50, 
            "capacity": 150, 
            "free": 65, 
            "reserved":100, 
            "used":85
        },
        {
            "name": "vol2", 
            "available": 100, 
            "capacity": 150, 
            "free": 110, 
            "reserved":50,
            "used":40
        }
    ],
    "shares": [
        {
            "name": "share1",
            "volume": "vol1",
            "capacity": 75, 
            "free": 10, 
            "used": 65,
            "files": 100000
        },
        {
            "name": "share2",
            "volume": "vol1",
            "capacity": 25, 
            "free": 5, 
            "used": 20,
            "files": 25000
        },
        {
            "name": "share3",
            "volume": "vol2",
            "capacity": 50, 
            "free": 10, 
            "used": 40,
            "files": 75000
        }
    ],
    "clients": [
        {
            "user": "bob",
            "read": 100,
            "write": 5
        },
        {
            "user": "alice",
            "read": 4,
            "write": 100
        },
        {
            "user": "eve",
            "read": 0,
            "write": 0
        }
    ]
}

AFAICT the split filter supports arrays of objects. Please explain why it doesn't work for you, preferably with an example.

$ cat test.config
input { stdin { codec => json } }
output { stdout { codec => rubydebug } }
filter { split { } }
$ echo '{"message": [{"foo": "bar"}, {"foo": "baz"}]}' | /opt/logstash/bin/logstash -f test.config
Settings: Default pipeline workers: 2
Pipeline main started
{
       "message" => {
        "foo" => "bar"
    },
      "@version" => "1",
    "@timestamp" => "2016-07-11T20:10:11.562Z",
          "host" => "hallonet"
}
{
       "message" => {
        "foo" => "baz"
    },
      "@version" => "1",
    "@timestamp" => "2016-07-11T20:10:11.562Z",
          "host" => "hallonet"
}
Pipeline main has been shutdown
stopping pipeline {:id=>"main"}

Thanks @magnusbaeck, I see this now. The documentation says "string" for the field datatype, so I was a bit confused.

Followup question, if you don't mind. Using a clone, then split gets me what I need, but the field names for example are clients.read clients.write etc. Is there a way to get the field to collapse to the last child objects, i.e. read and write?