当前位置: 首页 > 知识库问答 >
问题:

使用“/”字符作为JSON键的Jackson ObjectMapper

蓬野
2023-03-14

JSON设置(my-file.JSON):

 { ":x.y\/a" : "some value" }
ObjectMapper om = new ObjectMapper();
om.configure( JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true );
Map value = om.readValue( getClass().getResource( "/my-file.json" ).getFile() , HashMap.class );
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('/' (code 47)): maybe a (non-standard) comment? (not recognized as one since Feature 'ALLOW_COMMENTS' not enabled for parser)
at [Source: java.io.StringReader@31c74456; line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1524)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:557)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:475)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipComment(ReaderBasedJsonParser.java:1725)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipWSOrEnd(ReaderBasedJsonParser.java:1708)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:562)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2926)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2873)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)

任何想法,我可以如何配置这将是赞赏的。作为一个临时解决办法,我使用了Gson库,它可以很好地解析这个文件。

new Gson().fromJson( new FileReader( getClass().getResource( /my-file.json ).getFile() ), HashMap.class );

虽然这是可行的,但我更喜欢Jackson,因为我们在堆栈中的任何其他地方都使用它(并不反对Gson,只是现在不想将它添加为依赖项)。

共有1个答案

东方方伟
2023-03-14

问题出在getClass().getResource(“/my-file.json”).getFile()中。getFile()返回文件路径而不是文件内容。objectmapperreadvalue(String content,..)函数将content作为其第一个参数。您可以使用

Map value = om.readValue(getClass().getResourceAsStream("/my-file.json"), HashMap.class);

om.readvalue(new FileReader(路径),hashmap.class);类似于您的Gson示例也可以工作

 类似资料:
  • 问题内容: 具体来说,我正在尝试使用字符串任意过滤ORM。我已经尝试过exec和eval解决方案,但是我遇到了麻烦。下面的代码不起作用,但这是我知道如何解释我要去的地方的最好方法 问题答案:

  • 以下是相关的更新代码位。正如用户carmickr所建议的,我使用DefaultListModel来处理地址簿HashMap中的数据。 然后在UserInterface构造函数内部:

  • 如果我有: 如何在myKey上访问myObj?

  • 问题内容: 我有一个将数字键作为字符串类型的PHP数组。 但是当我尝试访问它们时,PHP给了我一个未定义的索引错误。 输出: 如何访问这些值? 演示:http://codepad.viper-7.com/8O03IM 问题答案: 因此,我还没有看到其他答案可以解决这个问题,但是@xdazz接近了。 让我们开始我们的环境,它等于已解码字符串的对象表示法: 如果您要访问字符串,我们知道以下操作将失败:

  • 问题内容: 我在解码JSON结构时遇到问题,我无法对其进行更改以使其更易于解码(它来自firebase)。 如何将以下JSON解码为对象?问题是如何转换“ 7E7-M001”。这是带有抽屉的容器的名称。抽屉名称也用作键。 我必须在Container&Drawer类中解决哪些问题,才能将键作为title属性和这些类中的对象数组? 问题答案: 首先,我将略作简化,以便我可以集中讨论此问题的重点。我将使

  • 问题内容: 我试图理解为什么当用作Hashmap密钥时,将String和Stringbuilder / StringBuffer区别对待。让我通过以下插图使我的困惑更加清楚: 示例1,使用String: 上面的代码片段打印为“ 1”。 Example#2,使用StringBuilder(或StringBuffer): 上面的代码片段打印为“ 2”。 任何人都可以解释一下行为差异的原因。 问题答案: