我有一个包含Json格式的HashMap客户列表的文件。
就像这样:
{"Davide":{"name":"Davide","cf":"FRCDVD","pi":"1234",
"telephone":"333","website":"www","sector":"Student","address":"Rome"}}
这只是列表的一个客户。每次调用控制器时,我都想从文件中获取数据并将其转换为HashMap列表。
我试着这样做:
HashMap<String, Customer> listCustomer = new HashMap<>();
listCustomer = new ObjectMapper().readValue(pathCustomerFile, HashMap.class); //This line gives me error
我得到这个错误:
org.codehaus.jackson.JsonParseException:意外字符('/'(代码47)):可能是(非标准)注解?(由于未为解析器启用特性"ALLOW_COMMENTS",因此未识别为注解)
我该怎么做呢?
6条答案
按热度按时间xesrikrc1#
我最近遇到了这个问题。我试图传递一个路径(以字符串的形式)给readValue。你需要传递一个字符串来解析,或者一个文件对象。根据你的变量name,我想你可能传递了一个文件的路径。
(基本上,它阅读文件路径中的“/”并在其上抛出错误。
cgfeq70w2#
请仔细检查您输入的JSON字符串,确保没有错误转义或在某处悬挂
/
。例如/\"name\"
。然后按以下方式提供正确的类型Map:我的答案在jackson-mapper-asl1.9.13中进行了测试。
**您只使用
HashMap.class
进行Map不会给予您想要的结果,因为Jackson会将您的JSONMap到Map<String, Map>
。当您尝试从Map中获取值并将其当作Customer类型进行操作时,您会发现这一点。ni65a41a3#
我将为客户创建一个POJO,它包含客户和getter/setter对的列表,如下所示:
然后,我将使用字段名称和customerDetails创建类Customer,如下所示:
最后,我将创建包含所有字段的类CustomerDetails,如下所示:
然后使用对象Map器将json中的所有客户Map到CustomersFile对象:
要访问客户列表,请拨打:
如果你真的需要一个HashMap,那么循环遍历列表并填充这个哈希Map:
下面是我在项目pom中使用的依赖项:
brvekthn4#
我遇到了同样的问题。我错误地在请求负载中发送了类似“//”的评论。删除“//”对我很有效。
bzzcjhmw5#
我在JSON中添加注解时遇到了同样的错误。我在https://github.com/elastic/elasticsearch/issues/1394上找到了解决方案
sgtfey8w6#
就我而言,这正是@Sergey K在最早的评论中指出的。所以功劳归于他。
原来
pathCustomerFile
是String
,Jackson运行时试图将该字符串的值解释为JSON对象,因此出现了错误。**意外字符'/'**是路径值
"/blah/blah.json"
的第一个字符您还可以通过
readValue
方法抛出的checked异常来了解这一点,如果它是ProcessingException
,那么参数本身很可能会被解释为JSON字符串。解决方案:
使用
File
Package 路径字符串可解决此问题:您也可以通过将抛出的检查异常更改为
IOException
来验证这一点。