【问题标题】:JSON Error "java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $"JSON 错误“java.lang.IllegalStateException:应为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ 处为 STRING”
【发布时间】:2015-10-04 03:18:25
【问题描述】:
public interface UserService {
    @POST(Constants.Api.URL_REGISTRATION)
    @FormUrlEncoded
    BaseWrapper registerUser(@Field("first_name") String firstname, @Field("last_name") String lastname, @Field("regNumber") String phone, @Field("regRole") int role);


 public BaseWrapper registerUser(User user) {
        return getUserService().registerUser(user.getFirstName(), user.getLastName(), user.getPhone(), user.getRole());
    }

这会产生异常

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

非常感谢您的帮助。

【问题讨论】:

  • 你的json错了,改正吧。

标签: java android json gson


【解决方案1】:

让我们看看您收到的错误。

预期的 BEGIN_OBJECT

您的 JSON 是一个对象,所有 JSON 对象都用大括号 ({}) 括起来。因此 BEGIN_OBJECT 是 {.它在某个地方期待它。

但是是字符串

但他发现了一个字符串“Something”。仍然没有告诉我们在哪里。

在第 1 行第 1 列路径 $

啊,完美。在第 1 行第 1 列。这是 JSON 的开头。所以您忘记将整个内容包含在 {} 中(或者至少您忘记了第一个,但我敢打赌您已经忘记了它们)。

【讨论】:

  • 请注意,如果 JSON 是数组,也可以用方括号 ( [ ] ) 括起来
  • 很好的解释和很好的格式。 +1 给你。
  • @OO7 @SnyersK @Astroga 如何避免我的应用程序崩溃 - 尝试格式化 API errorBody 响应时出现此错误(当我在 10 秒内错误请求例如 25 次时)...我'有catch (IOException | IllegalStateException e) 但它没有帮助......
  • 亲爱的@Astrogat 我的服务器中有一个拦截器根本没有被调用,但是我收到了这个错误!!!请帮忙
【解决方案2】:

清理和重建项目对我有用。

【讨论】:

    【解决方案3】:

    最近我遇到了类似的问题,只能通过将 "Accept: application/json" 添加到标题部分来解决。所以,如果你使用的是改造 2.0;

    第一种解决方案: 对于 post 方法,添加 headers 参数,如下所示;

    @Headers({"Accept: application/json"})
    @POST(Constants.Api.URL_REGISTRATION)
    @FormUrlEncoded
    BaseWrapper registerUser(@Field("first_name") String firstname, 
                             @Field("last_name") String lastname, 
                             @Field("regNumber") String phone, 
                             @Field("regRole") int role);
    

    第二个解决方案:像这样将标头添加到您的拦截器类中;

    注意:代码在 kotlin 中

    private fun getInterceptor(): Interceptor {
            try {
                return Interceptor {
                    val request = it.request()
                    it.proceed(
                        request.newBuilder()
                            .header("Accept", "application/json")
                            .header("Authorization", "$accessTokenType $accessToken")
                            .build()
                    )
                }
            } catch (exception: Exception) {
                throw Exception(exception.message)
            }
        }
    }
    

    希望对您有所帮助,祝您编码愉快:)

    【讨论】:

      【解决方案4】:

      如果您想在 json 对象中添加 ArrayList 并在 GSON 中解析,请确保 ArrayList 应如下所示。

      ArrayList<JSONObject>
      

      代替

      ArrayList<String>
      

      然后像这样解析。

      ArrayList<JSONObject> mItem = new ArrayList<JSONObject>();
      mItem.add(jsonObject);
      
      // and Use like this.
      JSONArray list = new JSONArray(mItem);
      jsonObject.put("Item",list);
      

      【讨论】:

        【解决方案5】:

        如果您的应用使用之前版本的存储数据并且您更改了数据类型,则可能会遇到此错误。

        例如:我在以前的版本中将某些内容存储为字符串。后来我将存储数据的类更新为对象类型。当我运行它时,我得到了这个错误。清除应用数据或重新安装后,错误清除。

        清除应用数据可能很容易解决。

        【讨论】:

          【解决方案6】:

          清理并重建项目 这是由于 Gson 文件混乱造成的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-11-27
            • 2020-04-10
            • 2021-09-03
            • 2013-12-20
            • 2022-01-08
            • 1970-01-01
            • 2018-07-28
            相关资源
            最近更新 更多