以下のようなhtmlを用意しました。

<form>
  <h2>クエリ1</h2>
  <input type="hidden" name="query[][name]" value="query1">
  <input type="hidden" name="query[][params][][name]" value="param11">
  パラメータ1<input type="text" name="query[][params][][value]" value="value11"><br>
  <input type="hidden" name="query[][params][][name]" value="param12">
  パラメータ2<input type="text" name="query[][params][][value]" value="value12"><br>
  <input type="hidden" name="query[][params][][name]" value="param13">
  パラメータ3<input type="text" name="query[][params][][value]" value="value13"><br>

  <h2>クエリ2</h2>
  <input type="hidden" name="query[][name]" value="query2">
  <input type="hidden" name="query[][params][][name]" value="param21">
  パラメータ1<input type="text" name="query[][params][][value]" value="value21"><br>
  <input type="hidden" name="query[][params][][name]" value="param22">
  パラメータ2<input type="text" name="query[][params][][value]" value="value22"><br>
  <input type="hidden" name="query[][params][][name]" value="param23">
  パラメータ3<input type="text" name="query[][params][][value]" value="value23"><br>

  <input type="submit" value="送信">
</form>

このフォームの送信ボタンを押した際、送られるデータをjson形式で見た場合に以下のようになると予想しました。

{
  "query": [
    {
      "name": "query1",
      "params": [
        {
          "name": "param11",
          "value": "value11"
        },
        {
          "name": "param12",
          "value": "value12"
        },
        {
          "name": "param13",
          "value": "value13"
        }
      ]
    },
    {
      "name": "query2",
      "params": [
        {
          "name": "param21",
          "value": "value21"
        },
        {
          "name": "param22",
          "value": "value22"
        },
        {
          "name": "param23",
          "value": "value23"
        }
      ]
    }
  ]
}

しかし結果は次のようになり、ぐちゃぐちゃでした。

{
  "query": [
    {
      "params": [
        { "value": "value11" }
      ]
    },
    {
      "params": [
        { "value": "value12" }
      ]
    },
    {
      "params": [
        { "value": "value13" }
      ]
    },
    {
      "params": [
        { "value": "value21" }
      ]
    },
    {
      "params": [
        { "value": "value22" }
      ]
    },
    {
      "params": [
        { "value": "value23" }
      ]
    },
    {
      "params": [
        { "name": "param11" }
      ]
    },
    {
      "params": [
        { "name": "param12" }
      ]
    },
    {
      "params": [
        { "name": "param13" }
      ]
    },
    {
      "params": [
        { "name": "param21" }
      ]
    },
    {
      "params": [
        { "name": "param22" }
      ]
    },
    {
      "name": "query1",
      "params": [
        { "name": "param23" }
      ]
    },
    { "name": "query2" }
  ]
}

htmlのname属性をどのように書けば、予想のような形になるでしょうか?
ちなみに配列の部分を、

{
  "0": {
    ...
  },
  "1": {
    ...
  },
  ...
}

といった書き方はしたくありません。連想配列ではなく普通の配列の形にして使いたいです。