【问题标题】:forward slash is not accepting while deserialize json [duplicate]反序列化json时不接受正斜杠[重复]
【发布时间】:2016-07-16 03:07:04
【问题描述】:

我正在尝试反序列化一条消息,但下面的语句出现异常。

Object key = gson.fromJson("40280381-3d27-5493-013d-4be146935c5c_abcdefg/ijklmnop", Class.forName("java.lang.String"));

由于字符串值中的/ 而发生异常,如果我删除正斜杠,此代码工作正常。但我确实需要字符串值中的/,请帮帮我。

实际方法

private void fillTheMap(JsonParser jp, Map<Object, Object> map) {
    JsonToken jt = jp.nextToken();
    while ((jt = jp.nextToken()) != JsonToken.END_ARRAY) {
        // Get the key.
        jt = jp.nextToken();

        String keyTypeName = jp.getCurrentName();
        keyTypeName = keyTypeName.replace(":mapKey", "");
        Class keyType = Class.forName(keyTypeName);

        jt = jp.nextToken();

        Object key = gson.fromJson(jp.getText(), keyType);

        Object value = deSerIze(jp);
        map.put(key, value);

        jt = jp.nextToken();
    }
}

例外

com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true) 接受格式错误的 JSON

【问题讨论】:

  • gson.fromJson...问题不是正斜杠,而是整个字符串...不是 JSON
  • 我很困惑你想要什么。你正在使用 Gson 将字符串转换为字符串?请在minimal reproducible example 中显示您的实际代码和 JSON 对象
  • 不,不是。你没看到你在做什么吗?你已经有一个字符串了。你为什么要尝试用 Gson 反序列化它?
  • JSONObject 已经类似于Map。您可以在两者中获取和输入值。你想要的只是在两者之间进行转换?
  • @cricket_007 我们有一个自定义的反序列化器来反序列化一个.ser文件,上面的代码是创建一个Map

标签: java json gson deserialization


【解决方案1】:

据我所知,JSON 中的斜杠字符应该被转义。尝试将/ 替换为\/

您也可以使用String.class 代替Class.forName("java.lang.String"),因为它更安全。

【讨论】:

  • 我也尝试了同样的方法,但得到了同样的异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2013-05-26
  • 2017-06-15
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
相关资源
最近更新 更多