【问题标题】:How to get a length of json object saved in local project directory?如何获取保存在本地项目目录中的json对象长度?
【发布时间】:2020-08-02 12:42:34
【问题描述】:

我有 spring-boot 项目,我的项目结构如下...

-src
-target
-pom.xml
-uploaded_json
 -- example.json

这是我的 example.json

[
    {
        "Username": "U1",
        "Password": "P1",
    },
    {
        "Username": "U2",
        "Password": "P2",
    },
    {
        "Username": "U3",
        "Password": "P3",
    }  
]
 

我可以读取 example.json 并将其保存为 int 类型变量吗?我应该使用 java.io.File 对象吗?请帮我弄清楚如何获取 JSON 文件的长度。提前谢谢你。

编辑:我用 simple-json 做了一个方法。

@GetMapping("getJSON")
    public String testmethod() {
        JSONParser parser = new JSONParser();
        File directory = new File(".");
        JSONArray a;
        try {
            a = (JSONArray) parser.parse(new FileReader(
                    directory.getCanonicalPath() + "\\uploaded_json\\example.json"));
            int length = a.size();
            System.out.println(length);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;

    }

【问题讨论】:

  • 在这种情况下,长度是什么意思?是 3 因为 JSON 列表中有 3 个对象吗?还是您的意思是以字节为单位的文件大小
  • @Joni 我的意思是数组的长度,所以在这种情况下我想要得到的是 3。抱歉,我没有说明我想要什么。
  • 您需要读取文件并解析 JSON 内容。您是否已在项目中使用 JSON 解析器库?如果有,是哪一个?

标签: java json spring-boot java-io


【解决方案1】:

我会使用jackson-databind library,使用类JsonNode

maven 仓库上的最新版本是 2.11.1

compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.1'

以下是使用jackson-databind 获取大小的示例:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;

public class GradleApplication {
    public static void main(String[] args) {
    

        try {
            File jsonFile = Paths.get("src", "main", "resources", "example.json").toFile();
            ObjectMapper mapper = new ObjectMapper();
            JsonNode node = mapper.readTree(jsonFile);
            System.out.println("The size of the json is : "+ node.size());
        } catch (IOException e) {
            e.printStackTrace();
        }

     
    }
}

【讨论】:

  • 谢谢!与我使用 simple-json 编辑的方法相比,它看起来很简单。你能检查一下你是否可以简化我上面的方法,因为我不习惯 json lib,我不知道那是正确的。(它返回正确大小的 json 数组)
  • @loone96,看起来不错,我建议只加载一次json,如果文件没有改变,对于webservice,每次加载文件都会消耗资源
  • 对于我的应用程序中的某些功能,我需要 json 的长度值。我应该将长度值作为上传到服务器的 json 文件保存到我的数据库中吗?
  • 我会添加一个静态类或 spring bean,用 .该文件只会加载一次,您可以使用类属性获取大小。如果选择使用 spring bean 来初始化类属性,请使用 spring @postConstruct。
猜你喜欢
  • 1970-01-01
  • 2016-09-27
  • 2014-07-18
  • 2019-10-20
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2019-10-17
相关资源
最近更新 更多