我试图使用GSON解析一些非常简单的JSON。这是我的代码:
Gson gson = new Gson();
InputStreamReader reader = new InputStreamReader(getJsonData(url));
String key = gson.fromJson(reader, String.class);
以下是从url返回的JSON:
{
"access_token": "abcdefgh"
}
我得到了一个例外:
E/AndroidRuntime(19447): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2
有什么想法吗?我是格森的新手。
这是Pojo密钥数据类型不同于json响应时发生的正常解析异常
这是由于Pojo类中的数据类型与网络api响应中的实际数据不匹配
如
data class ProcessResponse(
val outputParameters: String,
val pId: Int
)
得到了相同的错误,由于api给响应作为
{
"pId": 1",
"outputParameters": {
"": ""
}
}
这里POJO是输出参数是字符串,但每个api响应它的json
使用Gson JsonParser的另一种“低级”可能性:
package stackoverflow.questions.q11571412;
import com.google.gson.*;
public class GsonFooWithParser
{
public static void main(String[] args)
{
String jsonInput = "{\"access_token\": \"abcdefgh\"}";
JsonElement je = new JsonParser().parse(jsonInput);
String value = je.getAsJsonObject().get("access_token").getAsString();
System.out.println(value);
}
}
如果有一天你要编写一个定制的反序列化程序,JsonElement将是你最好的朋友。
JSON结构是一个有一个名为“access_token”的元素的对象——它不仅仅是一个简单的字符串。它可以反序列化为一个匹配的Java数据结构,如地图,如下所示。
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonFoo
{
public static void main(String[] args)
{
String jsonInput = "{\"access_token\": \"abcdefgh\"}";
Map<String, String> map = new Gson().fromJson(jsonInput, new TypeToken<Map<String, String>>() {}.getType());
String key = map.get("access_token");
System.out.println(key);
}
}
另一种常见的方法是使用与JSON匹配的更具体的Java数据结构。例如:
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
public class GsonFoo
{
public static void main(String[] args)
{
String jsonInput = "{\"access_token\": \"abcdefgh\"}";
Response response = new Gson().fromJson(jsonInput, Response.class);
System.out.println(response.key);
}
}
class Response
{
@SerializedName("access_token")
String key;
}
我对gson反序列化有问题 是我儿子 我的kotlin小工具 还有我的反序列化函数 我有这个错误 我不明白什么是错误的,我真的觉得一切都是正确的,我做了多次不同的测试。 你能帮助我吗。
当我只收到列表中的一个项目时,就会出现这个错误。我在服务器端REST Web服务中使用Jersey,只有当列表返回一个元素时,以及当它有但当它有多个异常时,它工作得非常完美,我就是这样做的: Jersey为什么不发送包含一个项目的列表?是泽西岛的虫子吗?有没有办法让它始终序列化为数组? 这是web服务返回0元素时的JSON数据: 这是web服务返回1个元素时的JSON数据: 当web服务返回超过1
我试图将JSON字符串转换为HashMap。下面是我的一些代码: 在这些行的最后一行(我在其中设置数据)抛出异常。 JSON字符串是 {"body":"body","start Date":"2014-05-30 11:00:00","endDate":"2014-05-30 12:00:00","位置":"位置","主题":"主题!"} 我得到的例外是 线程“main”java中出现异常。朗,反
我的java代码 我的JSON 除id外,所有字段均为字符串 我的错误 18/11/26 18:02:55信息mapreduce。作业:任务Id:尝试_1543189350698_0010_m_000000_0,状态:失败错误:com。谷歌。格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第3列的输入结束。谷歌。格森。格森。fromJson(G
这个错误又回来了! 我是改装的初学者,我看过这篇文章:改装:预期BEGIN_OBJECT但BEGIN_ARRAY 但是即使我试着让它适应我的模型,我仍然不能让它工作。所以我的错误是: 我得到的是: 解析类的属性: IoTGenericDevice子类的属性: 改装电话: 经理:
我知道以前有人问过很多这个问题,但在我的情况下,我找不到解决办法。我请求获得关于POJO(电影)列表的json回复 虽然这是我第一次使用改型,但我在标题中遇到了问题。我正在创建的url是正确的,下面是响应的示例: 这是我的模特 } 我的@GET 我的数据请求类 最后,我想在我的主要活动中做些什么