首页 > 解决方案 > 在进一步处理之前验证 JSON

问题描述

我有以下 csv 文件(在生产中,记录的数量可以从 20k-100k 不等,并且有很多字段)

id,firstname,lastname,email,profession
100,Betta,Wandie,Betta.Wandie@gmail.com,developer
101,Janey,Firmin,Janey.Firmin@gmail.com,doctor

我需要将其转换为 json 并进行进一步处理。CSV->JSON->进一步处理

.我可以使用此处给出的代码 直接将其转换为 JSON 使用 Jackson 库直接将 CSV 文件转换为 JSON 文件

但是我想对 json 进行验证,例如如果 lastname 具有空值然后忽略该记录或 id 丢失然后忽略该记录。

我该如何处理验证?我正在使用 Java 8 和 Spring Boot 最新版本

标签: javaspring-bootjackson

解决方案


我通过使用 JavaScript (Nashorn) 做了类似的事情。是的,这很糟糕,但它确实有效,而且速度快得惊人!

不幸的是,我手头没有源代码……</p>

我这样做的原因与@chrylis-on strike 在他们的评论中暗示的原因相同:如果每个 JSON 记录都有一个对象,验证会容易得多。但由于我很懒惰,而且绝对不需要为此创建 Java 对象,所以我有了在我的 Java 程序中使用 JavaScript 脚本的想法。

基本上,JSON 字符串是 JavaScript 程序的源代码;您可以将其直接分配给 JavaScript 变量,然后您可以将记录作为数组元素访问,并按名称访问字段。因此,您的 JavaScript 代码会遍历记录并删除那些与您的验证规则不匹配的记录。

现在是Java部分:这里的关键字是JSR223;它是一个 API,允许您在 Java 环境中执行脚本。在您的情况下,您必须在上下文中提供转换后的 JSON,然后启动将修改后的 JSON 写回上下文的脚本。

如果转换后的 JSON 太大,您甚至可以使用相同的技术逐条检查;如果您编译脚本,它几乎与本机 Java 一样快。

你甚至可以省略 Jackson 并让 JavaScript 进行转换……</p>

抱歉,我无法提供代码示例;如果我得到它们,我会尝试抓住它们并添加它们。


推荐阅读