【问题标题】:Conversion of String into Map in Java With Some Special CharactersJava中带有一些特殊字符的String到Map的转换
【发布时间】:2021-06-04 19:13:42
【问题描述】:

我正在尝试将 String 转换为 Java Map 但出现以下异常

com.google.gson.stream.MalformedJsonException

这是我要映射的字符串。

String myString = "{name=Nikhil Gupta,age=23,location=234Niwas@res=34}"
Map innerMap = new Gson().fromJson(myString,Map.class);

我理解这里的主要问题是由于这些特殊字符,我收到了这个错误。 如果我删除这些空格和特殊字符,那么它会正常工作。

有什么方法可以在不删除这些空格和特殊字符的情况下做到这一点?

目前使用的方法。

用特殊字符将这些字符串用单引号括起来。

String myString = "{name='Nikhil Gupta',age='23',location='234Niwas@res=34'}"

但这是我不想在生产环境中使用的东西,因为它不适用于嵌套结构。

在 java 中是否有一些真正的方法来解决这个问题?

【问题讨论】:

  • "但这是我不想在生产环境中使用的东西,因为它不适用于嵌套结构"你能澄清一下吗(因为这实际上是解决问题的正确方法 - 使 JSON 有效而不是弄清楚如何处理无效的)?
  • 您为什么不想在生产环境中使用真正的有效 JSON?你应该努力使用标准,这样这种说法就没有什么意义了。使用有效的 JSON 语法“真正的方式”。

标签: java gson


【解决方案1】:

我理解这里的主要问题是由于这些特殊字符,我得到了这个错误。

不,这不是因为“特殊字符”(无论具体是什么意思)。

{name=Nikhil Gupta,age=23,location=234Niwas@res=34}

您尝试解析的字符串根本不是 JSON 格式,而是其他一些表面上类似于 JSON 的格式。您通过将值括在单引号中的修复仍然不能使其成为 JSON。

如果它是有效的 JSON,它将如下所示:

{"name":"Nikhil Gupta","age":23,"location":"234Niwas@res=34"}

与您原来的显着差异:

  • 键必须用双引号括起来
  • 字符串值必须用双引号括起来(数字值不需要)
  • 键和值必须用冒号分隔:,而不是等号=

解决方法:

  • 使用实际的 JSON 格式;规格见json.org
  • 如果你不能让它成为真正的 JSON,并且你必须绝对使用你正在使用的格式,那么你需要为这种自定义的非 JSON 格式编写自己的解析器

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2013-02-22
    • 2018-05-08
    • 2017-07-18
    相关资源
    最近更新 更多