java - 在进一步处理之前验证 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 最新版本
解决方案
我通过使用 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>
抱歉,我无法提供代码示例;如果我得到它们,我会尝试抓住它们并添加它们。
推荐阅读
- ios - UIPageViewController——didFinishAnimating
- embedded-linux - 运行 gstreamer 时出错
- swift - 在不使用原始值的情况下将 swift 枚举与字符串进行比较
- php - 库输入类在 php codeigniter 中不起作用
- onclick - 将 html 中的 onclick 替换为 Js 中的事件处理程序
- pandas - 我如何仅访问以日期为索引的数据框的特定条目
- java - 来自控制台的带有引号/空格的 Javafx 命名参数
- java - 单击 ListView 中的项目时,从数据库中获取项目的 ID
- google-api - 如果我的 google 帐户被删除/停用,我的服务帐户会发生什么
- magento - 隐藏 magento 默认可配置选项并创建自己的