猿问

在JAVA中获取json文件

我有一个 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

@NoArgsConstructor

public 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);

    }


江户川乱折腾
浏览 151回答 1
1回答

MM们

在字符或标记在位置 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.
随时随地看视频慕课网APP

相关分类

Java
我要回答