我有一個 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
提交
取消