【问题标题】:Validate JSON before further processing在进一步处理之前验证 JSON
【发布时间】:2020-04-02 22:16:08
【问题描述】:

我有以下 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 directly convert CSV file to JSON file using the Jackson library

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

如何处理验证?我使用的是 Java 8 和 Spring Boot 最新版本

【问题讨论】:

  • 如果您使用 Java 记录类 (Person) 对数据进行建模,您的代码会简单得多。您可以使用迭代器或流一次读取一条记录。
  • 我也是这么想的。你能分享一下流的代码sn-p吗

标签: java spring-boot jackson


【解决方案1】:

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

很遗憾,我手头没有源代码……

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

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

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

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

您甚至可以省略 Jackson 并让 JavaScript 进行转换……

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

【讨论】:

  • 这似乎比 7 行 Java 记录类复杂得多。
  • @chrylis-onstrike-:OP 说“在生产中,记录的数量可以在 20k-100k 之间,并且有很多字段”——但是对于示例数据,你是对的!
猜你喜欢
  • 2021-08-13
  • 2011-06-22
  • 2023-03-04
  • 2015-03-31
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多