当前位置: 首页 > 面试题库 >

gson抛出MalformedJsonException

孙文康
2023-03-14
问题内容

我正在使用 gsonjson 字符串转换为Java对象。值 RESULT2 是完全一样的值 RESULT1
。(从调试器复制;添加了反斜杠)

转换result1时会引发以下异常:
com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期的EOF在第1行的第170列

转换 result2 效果很好。

json字符串根据jsonlint.com有效。

public static Userinfo getUserinfo()
{
    String result1 = http.POST("https://www.bitstamp.net/api/balance/",
                                postdata, true);
    String result2 = "{\"btc_reserved\": \"0\", \"fee\": \"0.5000\", \"btc_available\": \"0.10000000\", \"usd_reserved\": \"0\", \"btc_balance\": \"0.10000000\", \"usd_balance\": \"30.00\", \"usd_available\": \"30.00\"}";
    Gson gson = new Gson();
    Userinfo userinfo1 = gson.fromJson(result1, Userinfo.class); //throws Exception
    Userinfo userinfo2 = gson.fromJson(result2, Userinfo.class); //works fine

    return userinfo1;
}
private class Userinfo {

    public Userinfo(){
    }

    public float usd_balance;
    public float btc_balance ;
    public float usd_reserved;
    public float btc_reserved;
    public float usd_available;
    public float btc_available;
    public float fee;
    public float last_update;
}

问题答案:

我怀疑result1的末尾有一些字符,您在调试器中看不到结束}字符。result1vs
的长度是result2多少?我会注意到,result2正如您所引用的,它有169个字符。

GSON抛出特定的错误是没有空白的对象结束后,当有额外的字符,它定义空白 非常 狭窄(如JSON规格一样)
-只是\t\n\r,和空间算作空白。 特别要注意的是,结尾的NUL(\0)字符不算作空格,并且会导致此错误

如果您不容易弄清到底是什么导致了多余的字符并消除它们,另一种选择是告诉GSON以宽大的模式进行解析:

Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);
Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);


 类似资料:
  • 问题内容: 我正在使用gson将json字符串转换为Java对象。值RESULT2是完全一样的值RESULT1。(从调试器复制;添加了反斜杠) 转换result1时会引发以下异常: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期的EOF在第1行的第170列 转换result2效

  • 问题内容: 我正在尝试解析这样的JSON字符串 进入对象列表。 这是我正在使用的对象类。 但这让我着迷 有什么想法我应该如何解决? 问题答案: 问题是你要告诉你具有你类型的对象。你不知道 你有一系列类型的对象。你不能只是尝试像这样投射结果并期望它神奇地工作;) 《用户指南》介绍了如何处理此问题: https://github.com/google/gson/blob/master/UserGuid

  • 问题内容: 我在项目中使用Gson将JSON字符串反序列化为Java对象。如果我提出请求,我希望服务器发出明确定义的响应。服务器将返回我期望的定义明确的响应,或者将返回一个(也定义为)错误对象。 讲清楚一点:假设我有一个简单的对象,像这样: 和这样的错误对象: 如果我收到类似的服务器响应 一切都按预期进行。 但是如果回应是这样的 我会得到一个对象,那里是和是0!Gson文档(来自Json)明确指出

  • 在我的spark代码中有gson,它存储在字符串RDD中,我将其转换为键和值。 (1). (2). 但我收到了以下错误消息。谷歌。格森。JsonSyntaxException:java。伊奥。EOFEException:com第1行第2列的输入结束。谷歌。格森。格森。com上的fromJson(Gson.java:813)。谷歌。格森。格森。com上的fromJson(Gson.java:768)

  • 使用改装库来使用一项服务,我为我的界面、模型以及如何使用界面添加了代码。 我不断收到一个GSON抛出的“预期的BEGIN_对象,但是BEGIN_数组” 界面 模范公立班学生{ 我怎么称呼方法

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因