我有一个 json 文件,其格式为:{ "results": [ { "quiz": "1112세기에 발달한 고려의 대표적인 자기는 분청사기이다 ", "answer": " X " }, { "quiz": "16세기 말 이탈리아 음악극의 흐름을 따르고, 전부 또는 일부 대사가 노래로 ", "answer": " X " }, { "quiz": "1769년 세계최초로 자동차를 만든 사람은 ", "answer": "퀴노" } ]}我想在JAVA区获取这个文件。我有一个依赖项com.googlecode.json-simple(1.1.1 version),我有一个我写的代码抛出异常:(public List<CheatImported> importJsonFile(String path) throws IOException, FileNotFoundException, ParseException { JSONObject root = (JSONObject)jsonParser.parse(new FileReader(path)); JSONArray results = (JSONArray)root.get("results"); @SuppressWarnings("rawtypes") Iterator iter = results.iterator(); List<CheatImported> resultList = new ArrayList<CheatImported>(); while(iter.hasNext()){ JSONObject item = (JSONObject)iter.next(); String question = (String)item.get("quiz"); String answer = (String)item.get("answer"); CheatImported imported = new CheatImported(); imported.setQuestion(question); imported.setAnswer(answer); resultList.add(imported); } return resultList; }ArrayList 的类型是一个只有两个字符串属性的类:@Getter@Setter@NoArgsConstructorpublic class CheatImported { private String question; private String answer;}这是我的junit代码:@Test public void cheatImported() throws Exception{ String path = "D:\\workspace_orderByDate\\20180105\\moonBladeQuiz\\src\\main\\resources\\static\\data.json"; List<CheatImported> list = importService.importJsonFile(path); assertTrue(list.size() > 0); }
1 回答
MM们
TA贡献1886条经验 获得超2个赞
在字符或标记在位置 0 处意外的情况下,虽然 JSON 看起来有效,但几乎总是字节顺序标记的问题。
来自维基百科:
字节顺序标记 (BOM) 是一个 Unicode 字符,即 U+FEFF BYTE ORDER MARK (BOM),它在文本流开头作为幻数出现,可以向使用该文本的程序发出若干信号。
标记的功能之一是指示多字节字符的哪个字节先出现。这称为流的字节序。对于 UTF-8,顺序是一成不变的,因此 BOM 在 UTF-8 的上下文中没有任何作用。
但是,JSON 规范不允许存在除空格或 JSON 结构之外的任何标记。字节顺序标记也不例外,因此字节顺序标记不是有效的 JSON。
您需要从文件中删除字节顺序标记才能使其工作。
在 Notepad++ 中,打开文件并选择Encoding » UTF-8 (without BOM)。
或者,您可以使用十六进制编辑器打开文件并删除前三个字节,即
0xEF BB BF
.
添加回答
举报
0/150
提交
取消