com.google.gson.JsonSyntaxException 解析简单 JSON 字符串时
com.google.gson.JsonSyntaxException when parsing simple JSON string
我正在尝试使用 Gson 将以下 JSON 字符串解析为 class:
{"email":"leerling@rocgilde.nl","screenname":"Leerling","username":"leerling"}
根据我在文档中阅读的内容,有必要将您的 class 设计得与您的 JSON 完全一样,所以我做到了:
public class UserDetails {
private String email;
private String screenname;
private String username;
}
这么基本的东西怎么会导致 com.google.gson.JsonSyntaxException
?
谢谢。
** 编辑 **
根据要求,我对 Gson 库的使用:
details = gson.fromJson(res, UserDetails.class);
res
变量指向问题顶部给出的 JSON。
此外,我的完整堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wesleypeeters.fysio, PID: 5625
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at com.wesleypeeters.fysio.users.User.<init>(User.java:51)
at com.wesleypeeters.fysio.activities.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:155)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at com.wesleypeeters.fysio.users.User.<init>(User.java:51)
at com.wesleypeeters.fysio.activities.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:155)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
您似乎正在从 res 变量中去除大括号。您的错误消息通常表明它期待 {
但它得到 "
.
Expected BEGIN_OBJECT but was STRING at line 1 column 2
这告诉我们您传递给它的字符串有问题。它希望在开头有一个 {
,而且您似乎确实提供了它。您传递给 GSON 的字符串是否没有格式化为忽略引号?尝试使用 Log.d() 打印出 res
变量并检查它是否有错误
我正在尝试使用 Gson 将以下 JSON 字符串解析为 class:
{"email":"leerling@rocgilde.nl","screenname":"Leerling","username":"leerling"}
根据我在文档中阅读的内容,有必要将您的 class 设计得与您的 JSON 完全一样,所以我做到了:
public class UserDetails {
private String email;
private String screenname;
private String username;
}
这么基本的东西怎么会导致 com.google.gson.JsonSyntaxException
?
谢谢。
** 编辑 ** 根据要求,我对 Gson 库的使用:
details = gson.fromJson(res, UserDetails.class);
res
变量指向问题顶部给出的 JSON。
此外,我的完整堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wesleypeeters.fysio, PID: 5625
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at com.wesleypeeters.fysio.users.User.<init>(User.java:51)
at com.wesleypeeters.fysio.activities.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:155)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at com.wesleypeeters.fysio.users.User.<init>(User.java:51)
at com.wesleypeeters.fysio.activities.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:155)
at android.os.AsyncTask.finish(AsyncTask.java:660)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
您似乎正在从 res 变量中去除大括号。您的错误消息通常表明它期待 {
但它得到 "
.
Expected BEGIN_OBJECT but was STRING at line 1 column 2
这告诉我们您传递给它的字符串有问题。它希望在开头有一个 {
,而且您似乎确实提供了它。您传递给 GSON 的字符串是否没有格式化为忽略引号?尝试使用 Log.d() 打印出 res
变量并检查它是否有错误