gson 利用特殊字符实现Java中字符串到Map的转换

t9eec4r0  于 2022-11-23  发布在  Java
关注(0)|答案(1)|浏览(231)

我正在尝试将String转换为Java Map,但遇到以下异常
错误的JSON异常**
这是我尝试Map的字符串。

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

我明白了这里的主要问题,因为这些特殊字符,我得到了这个错误。如果我删除这些空格和特殊字符,那么它将工作正常。
有没有办法在不删除这些空格和特殊字符的情况下执行此操作?
到目前为止使用的方法。
用单引号将这些字符串与特殊字符 Package 在一起。

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

但是我不想在生产环境中使用它,因为它不适用于嵌套结构。
在java中有没有真正的方法来处理这个问题?

jc3wubiy

jc3wubiy1#

我明白了这里的主要问题,因为这些特殊字符,我得到了这个错误。
不,这不是因为“特殊字符”(不管它的确切含义是什么)。

{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格式编写自己的解析器

相关问题