最初にJSONArrayへのパースを試みて、失敗した場合はJSONObjectとしてパースしてからJSONArrayに変換するようなConverterを自作すれば対応できると思います。(対応すべきかどうかは置いておくとして)
以下、Kotlinおよびorg.json.JSONArrayでのシンプルな実装例です。
kotlin
1class JSONArrayConverterFactory : Converter.Factory() {
2 override fun responseBodyConverter(...): Converter<ResponseBody, JSONArray>? {
3 return JSONArrayConverter
4 }
5
6 private object JSONArrayConverter : Converter<ResponseBody, JSONArray> {
7 override fun convert(value: ResponseBody): JSONArray? {
8 val json = value.string()
9 return try {
10 JSONArray(json)
11 } catch (e: JSONException) {
12 val jsonObject = JSONObject(json)
13 jsonObject.toJSONArray(jsonObject.names())
14 }
15 }
16 }
17}
kotlin
1val retrofit = Retrofit.Builder()
2 ...
3 .addConverterFactory(JSONArrayConverterFactory())
4 .build()
なお、あくまでご提示のPHPの問題に対応するためのものなので、オブジェクトのキーに数字以外が紛れていた場合などの例外処理については考慮していません。必要であれば追加してください。