我一直在寻找解决方案几个小时但没有成功。我有一个json字符串,我尝试映射到我的java模型,但运行代码我得到上述异常。 JSON字符串:
{"productOptions" : {"2-bruch Kreuzfalz" : "nein"},"uploadData" : {"20682967" : {"mergedFile" : "C:\Users\userName\IdeaProjects\projectName\target\test-classes\com\flyeralarm\tools\kronos\order\integration\input\DE151886742X01_20150727131135.pdf"}}}
为了节省时间和空间,我不会发布java模型代码,但是如果需要它来解决任务我会这样做。我怀疑是因为合并文件的路径包含'C:\ Users',其中反斜杠后跟char'U'。由于它只是一个嫌疑人,我不太清楚该怎么做。我做的......错误?我该如何解决错误?
更新
如果我是对的并且杰克逊试图逃脱路径中的“U”,那为什么会这样呢?我故意把路径放到引号中。为什么杰克逊认为斜线是逃避尝试?
答案 0 :(得分:2)
问题是你问题中的原始JSON无效。
根据JSON specification,字符串的(BNF)语法为:
string ::= ""
" chars "
chars ::= char
char chars
char ::= any-Unicode-character-except-"-or-\-or-control-character
\"
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
在英语中,这意味着字符串中的反斜杠是一个转义字符,并且后面不能跟一个大写U
。
如果我是对的,杰克逊试图逃避“你好”。在路上,为什么会这样呢?
因为JSON规范说它必须这样做。问题在于你对JSON的理解,而不是杰克逊的行为。
如果要在JSON字符串中包含文字反斜杠,则需要使用反斜杠转义它们... e.g。
{"mergedFile" : "C:\\Users\\userName\\frobbit.pdf"}
答案 1 :(得分:0)
只是尝试将反斜杠更改为正常的斜杠并且它有效。有点奇怪,我被迫只使用一种类型的斜杠,但至少它现在有效。澄清: 改变
"C:\Users\userName\IdeaProjects\projectName\target\test-classes\com\flyeralarm\tools\kronos\order\integration\input\DE151886742X01_20150727131135.pdf"
到
"C:/Users/a.eirich/IdeaProjects/kronos/src/test/resources/com/flyeralarm/tools/kronos/order/integration/input/DE151886742X01_20150727131135.pdf"
完成了这项工作。
答案 2 :(得分:0)
我知道这有点晚了,但是有2次反冲引发了相同的错误
有4个反冲\\\\有效
我在MySQL数据库中有此记录 “ {\” mergedFile \“:\” C:\\\\ Users \\\\ userName \\\\ frobbit.pdf \“}”