使用Java的Path和Files,导出json文件

这里传进来的数据是set(用于arraylist去重)

代码

public class JsonFile {
    private static final Logger log = LoggerFactory.getLogger(JsonFile.class);

    static void output(Set<Artifact> set) {
        String folderPath = "json";
        String jsonFileName = "updatedArtifacts.json";

        try {
            Path path = Paths.get(folderPath);
            if (!Files.exists(path)) {
                Files.createDirectories(path);
            }
        } catch (Exception e) {
            log.error("寻找json文件夹失败", e);
        }

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

        File jsonFile = new File(folderPath + File.separator + jsonFileName);


        try {
            // 下载时只会下载set里面的数据,缓存中别的数据不会被下载
            objectMapper.writeValue(jsonFile, set);
            System.out.println("JSON 文件已成功导出到:" + jsonFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
            log.error("导出json文件失败", e);
        }
    }
}

注意:Artifact对象一定要有getset方法,虽然看着没有使用,但是ObjectMapper封装里是有用到的

相关知识点

文件夹若不存在则创建

将字符串拼接成路径

// 运行结果:a\b\c.gz 
Path path = Paths.get("a", "b", "c.gz");
try {
     Path path = Paths.get(folderPath);
          if (!Files.exists(path)) {
              Files.createDirectories(path);
          }
     } catch (Exception e) {
          log.error("寻找json文件夹失败", e);
     }

复制、移动、删除文件

Path path1 = Paths.get("a.txt");
Path path2 = Paths.get("b.txt");


Path copy = Files.copy(path1, path2);

Path move = Files.move(path1, path2);

Files.deleteIfExists(path1);

ObjectMapper

ObjectMapper是Jackson的主要类,它可以帮助我们快速的进行各个类型和Json类型的相互转换。

json字符串与对象互转

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Hyl\", \"age\":20}";
 
//将字符串转换为对象
Student student = mapper.readValue(jsonString, Student.class);
 
//将对象转换为json字符串
jsonString = mapper.writeValueAsString(student);

数组和对象之间互转

//对象转为byte数组
byte[] byteArr = mapper.writeValueAsBytes(student);

//byte数组转为对象
Student student= mapper.readValue(byteArr, Student.class);

集合和json字符串之间互转

List<Student> studentList= new ArrayList<>();

// 集合转字符串
String jsonStr = mapper.writeValueAsString(studentList);
System.out.println(jsonStr);
        
List<Student> studentList2 = mapper.readValue(jsonStr, List.class);
System.out.println("字符串转集合:" + studentList2 );

map和json字符串之间转换

Map<String, Object> testMap = new HashMap<>();

// 集合转json
String jsonStr = mapper.writeValueAsString(testMap);

// json转集合
Map<String, Object> testMapDes = mapper.readValue(jsonStr, Map.class);

readTree()

此方法更灵活,可以只将用户感兴趣的Json串信息值提取出来。主要利用ObjectMapper提供的readTree和Jackson提供的JsonNode类来实现。

String test="{"results":[{"objectID":357,"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]},{"objectID":358,"geoPoints":[{"x":504602.2680053711,"y":305554.43603515625}]}]}";
 
//此Json串比较复杂,包含了嵌套数组的形式,具有通用性。
 
//2.2.2.2实现反序列化
JsonNode node= objectMapper.readTree(test); // 将Json串以树状结构读入内存
 
JsonNode contents=node.get("results"); // 得到results这个节点下的信息
 
//遍历results下的信息,size()函数可以得节点所包含的的信息的个数,类似于数组的长度
for (int i = 0; i < contents.size(); i++) {
 
    //读取节点下的某个子节点的值
    System.out.println(contents.get(i).get("objectID").getIntValue()); 
 
    JsonNode geoNumber=contents.get(i).get("geoPoints");
 
        //循环遍历子节点下的信息
        for(int j=0;j<geoNumber.size();j++) {

             System.out.println(geoNumber.get(j).get("x").getDoubleValue()+"           "+geoNumber.get(j).get("y").getDoubleValue()); 
    }
}
 

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值