java - 解析简单 JSON 字符串时出现 com.google.gson.JsonSyntaxException

标签 java android json gson

我正在尝试使用 Gson 将以下 JSON 字符串解析为一个类:

{"email":"leerling@rocgilde.nl","screenname":"Leerling","username":"leerling"}

根据我在文档中读到的内容,有必要设计与 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 1"

关于java - 解析简单 JSON 字符串时出现 com.google.gson.JsonSyntaxException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620114/

相关文章:

android - 使用雅虎天气 Api

java - 在if语句中创建对象

php - 在android中创建动态表单

json - 当我使用 Jackson ObjectMapper() 类的 writeValueAsString() 方法时,如何解决这个无限递归(StackoverflowError)?

java - 为什么某些模拟器的键盘是白色的,而我的设备和某些模拟器上的键盘是黑色的?

Android:API 级别 < 14 上的 menuItem.expandActionView()

JSON 值 1 或 0 - int 或 boolean

java - 如何创建 Jersey FormDataContentDisposition 对象?

Java - 使用 ReplaceALL 表达式解析输入

java - Spring Data Elastic Search 与 Java 高级 REST 客户端