java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot读取resources下json配置文件

Springboot如何读取resources下的json配置文件

作者:极值小白

这篇文章主要介绍了Springboot如何读取resources下的json配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Springboot读取resources下json配置文件

编写json文件放置在resources目录下

例:

编写test.json文件,放在Springboot工程resource目录下

{
 "string": "王大锤",
 "object": {
     "objectTest": "objectTestValue"
     },
 "array": [
         {
         "arrayTest": "arrayTestValue"
         }
     ]
}

文件读取及解析

解析json文件的内容用使用了fastjson包,可在pom文件中进行以下引用:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.49</version>
</dependency>

解析方法:

  public void JsonTest() throws IOException {
        String path = "/test.json";
        InputStream config = getClass().getResourceAsStream(path);
        if (config == null) {
            throw new RuntimeException("读取文件失败");
        } else {
            JSONObject json = JSON.parseObject(config, JSONObject.class);
            System.out.println(json);
        }
    }

以上方法输出的json参数,会完整打印test.json文件中的内容,并保留着json对象的性质。

如果需要读取整个文件内容作为配置,着可直接使用此参数或进行相应的格式转换。

若只要文件中某一个参数作为配置进行引入,则可使用以下方法,进一步解析数据。

    // 获取值为String类型的参数
    String str = json.getString("string");
    // 获取值为{}对象类型的参数
    JSONObject obj = json.getJSONObject("object");
    // 获取值为[]数组(列表)类型的参数
    JSONArray array = json.getJSONArray("array");

json文件类类型基本就这三种,复杂的json文件需要有耐心层层解析得到数据,有规律的json数据可通过建立类的方式,直接转换成实体类进行解析。

Springboot解析resource中的json

通常由两种方法

方法一

        try {
            // 根据resource文件路径,生成文件
            File jsonFile = ResourceUtils.getFile("classpath:ZhongLv.json");
            // 解析文件为指定编码的字符串
            // 方法实现:先将文件转inPutStream,再调用下面的IOUtils.toString()方法;
            String json = FileUtils.readFileToString(jsonFile,"UTF-8");
            JSONArray jsonArray = JSON.parseArray(json);
        } catch (IOException e) {
            e.printStackTrace();
        }

方法二

    /**
     * 本系统和第三方系统字段对应关系json
     */
    @Value("classpath:ZhongLv.json")
    private Resource relation;
       String relationStr = null;
        try {
            // 方法实现:将文件的InputStream写入inputStreamReader,再调用方法把reader写入writer,再使用StringBuilderWriter接收,最后toString();
            relationStr = IOUtils.toString(relation.getInputStream(), StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }

心得

    private static final int EOF = -1;
    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
    public static String toString(InputStream input, Charset encoding) throws IOException {
        StringBuilderWriter sw = new StringBuilderWriter();
        InputStreamReader in = new InputStreamReader(input, Charsets.toCharset(encoding));
        char [] buffer = new char[DEFAULT_BUFFER_SIZE];
        long count = 0;
        int n = 0;
        while (EOF != (n = in.read(buffer))) {
            sw.write(buffer, 0, n);
            count += n;
        }
        return sw.toString();
    }

他们的底层都是IO操作,汇总后的IOUtils.toString方法如下

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文