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

Java gson抛出MalformedJsonException

耿志义
2023-03-14
问题内容

我正在使用gson将json字符串转换为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;
}

问题答案:

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列 转换

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

  • 问题内容: 我正在使用“ mvn install”编译一个开源项目,但最终结果为。我尝试执行,但输出为Java摘要,指示这是无效命令。 我正在使用,为什么会发生这种情况? 谢谢, 问题答案: 设置环境变量:

  • 问题内容: 当我遍历列表时,偶尔会得到一个。Google搜索通知我,这可能是因为我在迭代该列表时正在另一个线程中更改该列表,并且要使此问题消失,我应该使用…。 …除了我已经是。 显然,我在某处正在做一些 非常 愚蠢的事情。 是否有人对如何引发抛掷物有任何见识?如果有关系,我正在使用Java 5。 编辑: 由于我使用的转换器可能很重要,因此我以两种方式修改此列表: 在前面添加元素。() 使用subL

  • 问题内容: Java程序中的“思考”如下: 我期望输出如下: 但是得到 显然,try块抛出ClassNotFoundException,这是意外的。有什么想法为什么代码会抛出此错误而不是像预期的那样初始化Gum类? 问题答案: 你的类在包,所以他们完全合格的名称,和。仅接受标准名称: 参数: -所需类的完全限定名称。 将您的代码更改为:

  • 问题内容: 我想在我的存储库层中有一个选项来渴望加载实体,所以我尝试添加一种方法来渴望加载具有所有关系的问题实体,但是它会抛出MultipleBagFetchException。我怎样才能解决这个问题?我正在使用Hibernate 4.16。 我如何获得一个最初是延迟加载的问题对象,以期渴望加载所有关系? 问题答案: 在Hibernate和通常的ORM中,这是一个相当棘手的问题。 发生的情况是,许