You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析API返回JSON字符串时遇Unexpected character异常问题

解决JSON解析时的Unexpected character (o)异常问题

这个报错的核心原因是你构造的JSON字符串格式完全不合法,解析器根本没法正确识别它的结构。咱们一步步拆解问题:

问题出在哪?

你写的字符串是:

String s = new String("{\"identified_faces_names\": \" [\"omar\",\"elhoussinep\"]\"}");

咱们把这个字符串还原成实际的JSON内容看看:
{"identified_faces_names": " ["omar","elhoussinep"]"}
看到了吗?在" ["omar"这里,["前面的双引号没有转义,解析器读到这里会认为identified_faces_names的字符串值已经结束(因为遇到了第二个双引号),接下来的o就成了完全不符合JSON语法的非法字符——这就是你看到Unexpected character (o) at position 0的原因。

另外还有个逻辑问题:identified_faces_names明显是要存储一组名字,应该用JSON数组类型,而不是把数组当成字符串来存,这既不符合JSON的设计规范,也会给后续的数据处理添乱。

怎么解决?

方案1:使用合法的JSON数组(推荐)

直接把identified_faces_names定义为数组类型,同时正确转义字符串里的双引号:

String s = "{\"identified_faces_names\": [\"omar\",\"elhoussinep\"]}";
JSONParser parser = new JSONParser();
Object obj = parser.parse(s);

这样还原后的JSON是完全合法的:
{"identified_faces_names": ["omar","elhoussinep"]}
解析器可以正常识别这个结构,不会再抛出异常。

方案2:如果必须把数组作为字符串存储(不推荐)

如果你因为特殊业务需求,一定要把数组内容放在字符串里,那必须转义字符串内部的所有双引号:

String s = "{\"identified_faces_names\": \"[\\\"omar\\\",\\\"elhoussinep\\\"]\"}";
JSONParser parser = new JSONParser();
Object obj = parser.parse(s);

还原后的JSON是:
{"identified_faces_names": "[\"omar\",\"elhoussinep\"]"}
这种写法虽然能通过解析,但后续你还要额外把字符串转成数组,完全没必要,所以优先选方案1。

额外提醒

你提到API返回的内容是{"identified_faces_names": "["omar", "elhoussinep"]"},这个API返回本身也是非法的JSON格式。如果这是真实的接口返回,你还需要对接API的团队修复这个问题,让他们返回标准的JSON数组格式,避免后续再遇到类似的解析问题。

内容的提问来源于stack exchange,提问作者SinkingTitanic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:48