title: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path despite JSON being correct
body: <p>I've viewed all the other stackoverflow topics regarding this, and they almost always have the same flaw in their JSON that is being called, which is that the JSON contains only one object, and not an array. I made sure to fix this, below you can see the JSON that is being returned after the query is executed in Postman.</p>
  
  <p>I've exhausted my search for a solution, as every solution online involves converting the JSON into an array, like I have already done. I found a tutorial online on how to call a list using retrofit (<code>Call&lt;List&lt;Object&gt;&gt;</code>) and it uses almost identical code to mine, and the JSON is in the same format, so I believe my JSON is correct</p>
  
  <p>First, the JSON being returned:</p>
  
  <pre><code>[
    {
      "is_active": 1,
      "match_date": "Wed, 09 Oct 2019 13:53:27 GMT",
      "match_id": 2,
      "match_winner_user_id": null,
      "rnd1_cat1": "test category1",
      "rnd1_cat1_q1": {
        "category_id": 1,
        "correct_answer": {
          "answer_id": 1,
          "answer_text": "test answer1",
          "is_active": 1
        },
        "incorrect_answer1": {
          "answer_id": 2,
          "answer_text": "test answer2",
          "is_active": 1
        },
        "incorrect_answer2": {
          "answer_id": 3,
          "answer_text": "test answer3",
          "is_active": 1
        },
        "incorrect_answer3": {
          "answer_id": 4,
          "answer_text": "test answer4",
          "is_active": 1
        },
         (snipped part of JSON out, it's about 450 lines in total),
      "rnd2_cat2_q3_user1_answer": null,
      "rnd2_cat2_q3_user2_answer": null,
      "user1_id": 36,
      "user2_id": 21
    },
    {
      "is_active": 1,
      "match_date": "Wed, 09 Oct 2019 13:53:27 GMT",
      "match_id": 2,
      "match_winner_user_id": null,
      "rnd1_cat1": "test category1",
      "rnd1_cat1_q1": {
        "category_id": 1,
        "correct_answer": {
          "answer_id": 1,
          "answer_text": "test answer1",
          "is_active": 1
        },
        "incorrect_answer1": {
          "answer_id": 2,
          "answer_text": "test answer2",
          "is_active": 1
        },
        "incorrect_answer2": {
          "answer_id": 3,
          "answer_text": "test answer3",
          "is_active": 1
        },
        "incorrect_answer3": {
          "answer_id": 4,
          "answer_text": "test answer4",
          "is_active": 1
        },
        (snipped part of JSON out, it's about 450 lines in total),
      "rnd2_cat2_q3_user1_answer": null,
      "rnd2_cat2_q3_user2_answer": null,
      "user1_id": 36,
      "user2_id": 21
    }
  ]
  </code></pre>
  
  <p>and the interface class: </p>
  
  <pre><code>    @POST("/api/v1/match/getMatches")
      Call&lt;List&lt;Match&gt;&gt; getMatches(@Header("Authorization") String authorization);
  </code></pre>
  
  <p>the Match class, which is just Annotating the objects and auto-generated getters:</p>
  
  <pre><code>import com.google.gson.annotations.SerializedName;
  
  public class Match {
  
      @SerializedName("match_id")
      private int matchId;
  
      @SerializedName("user1_id")
      private int user1Id;
      @SerializedName("user2_id")
      private int user2Id;
  
      // Categories
      @SerializedName("rnd1_cat1")
      private String rnd1_cat1;
      @SerializedName("rnd1_cat2")
      private String rnd1_cat2;
      @SerializedName("rnd2_cat1")
      private String rnd2_cat1;
      @SerializedName("rnd2_cat2")
      private String rnd2_cat2;
  
      //Questions, which contain answers objects within them
      @SerializedName("rnd1_cat1_q1")
      private Question rnd1_cat1_q1;
      @SerializedName("rnd1_cat1_q2")
      private Question rnd1_cat1_q2;
      @SerializedName("rnd1_cat1_q3")
      private Question rnd1_cat1_q3;
      //Cat2
      @SerializedName("rnd1_cat2_q1")
      private Question rnd1_cat2_q1;
      @SerializedName("rnd1_cat2_q2")
      private Question rnd1_cat2_q2;
      @SerializedName("rnd1_cat2_q3")
      private Question rnd1_cat2_q3;
      //Round 2
      @SerializedName("rnd2_cat1_q1")
      private Question rnd2_cat1_q1;
      @SerializedName("rnd2_cat1_q2")
      private Question rnd2_cat1_q2;
      @SerializedName("rnd2_cat1_q3")
      private Question rnd2_cat1_q3;
      //Cat2
      @SerializedName("rnd2_cat2_q1")
      private Question rnd2_cat2_q1;
      @SerializedName("rnd2_cat2_q2")
      private Question rnd2_cat2_q2;
      @SerializedName("rnd2_cat2_q3")
      private Question rnd2_cat2_q3;
  
      public int getMatchId() {
          return matchId;
      }
  
      public int getUser1Id() {
          return user1Id;
      }
  
      public int getUser2Id() {
          return user2Id;
      }
  
      public String getRnd1_cat1() {
          return rnd1_cat1;
      }
  
      public String getRnd1_cat2() {
          return rnd1_cat2;
      }
  
      public String getRnd2_cat1() {
          return rnd2_cat1;
      }
  
      public String getRnd2_cat2() {
          return rnd2_cat2;
      }
  
      public Question getRnd1_cat1_q1() {
          return rnd1_cat1_q1;
      }
  
      public Question getRnd1_cat1_q2() {
          return rnd1_cat1_q2;
      }
  
      public Question getRnd1_cat1_q3() {
          return rnd1_cat1_q3;
      }
  
      public Question getRnd1_cat2_q1() {
          return rnd1_cat2_q1;
      }
  
      public Question getRnd1_cat2_q2() {
          return rnd1_cat2_q2;
      }
  
      public Question getRnd1_cat2_q3() {
          return rnd1_cat2_q3;
      }
  
      public Question getRnd2_cat1_q1() {
          return rnd2_cat1_q1;
      }
  
      public Question getRnd2_cat1_q2() {
          return rnd2_cat1_q2;
      }
  
      public Question getRnd2_cat1_q3() {
          return rnd2_cat1_q3;
      }
  
      public Question getRnd2_cat2_q1() {
          return rnd2_cat2_q1;
      }
  
      public Question getRnd2_cat2_q2() {
          return rnd2_cat2_q2;
      }
  
      public Question getRnd2_cat2_q3() {
          return rnd2_cat2_q3;
      }
  }
  </code></pre>
  
  <p>and finally the call:</p>
  
  <pre><code>Call&lt;List&lt;Match&gt;&gt; call = backendApi.getMatches(auth_token);
          call.enqueue(new Callback&lt;List&lt;Match&gt;&gt;() {
              @Override
              public void onResponse(Call&lt;List&lt;Match&gt;&gt; call, Response&lt;List&lt;Match&gt;&gt; response) {
                  if(!response.isSuccessful()){
                      Log.e("login activity", "2");
                      return;
                  }
                  List&lt;Match&gt; matchList = response.body();
                  Log.i("match list", matchList.size()+"");
  
  
  
              }
  
              @Override
              public void onFailure(Call&lt;List&lt;Match&gt;&gt; call, Throwable t) {
                  Log.e("retrofit", t.getMessage());
              }
          });
  </code></pre>
  
  <p>For some reason, I get the error: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path, even though everything is in order as far as I can tell.</p>
  
  <p>Any help is greatly appreciated, thanks!</p>