为了账号安全,请及时绑定邮箱和手机立即绑定

在JAVA中获取json文件

在JAVA中获取json文件

江户川乱折腾 2021-12-01 15:01:12
我有一个 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.


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信