【问题标题】:Spring & MongoCursor & Jackson JsonNode (Database conversion)Spring & MongoCursor & Jackson JsonNode (数据库转换)
【发布时间】:2017-04-22 21:08:42
【问题描述】:

我在解析从 MongoCursor 获得的用于使用 JsonNode 的字符串时遇到问题。我试图让 MongoCursor 返回的 Json 与我的 Spring SQL POJO 一起工作,所以我可以将它插入到我的 SQL 数据库中。基本上这是一个数据库转换,SQL端只是用于历史存储。我没有使用 spring 的 mongo,因为字段与 POJO 的有些不同。(MongoDB 和 SQL 的架构略有不同)

目前,它通过使用模式匹配器/字符串拆分和替换然后对它们进行 HashMap 来工作,这样我就可以获得每个字段的键值对,然后将其插入到我的 spring POJO 中。我知道我也可以使用杰克逊的 POJO 来工作,但被告知使用 jsonNode 作为更好的解决方案。一定是我遗漏了什么。

在 Jackson 文档中,“json”字符串的格式为:

{ \"color\" : \"Black\", \"type\" : \"BMW\" }

但是,MongoCursor 返回给我的情况并非如此。使用光标,我得到类似:

文档{{_id=G8HQW9123, User=test}}

我使用字符串模式匹配器和 replaceAll 来减少:

{_id:G8G8HQW9123, 用户:test}

但是,杰克逊的斜杠和双引号让我感到厌烦,无法解析。我错过了什么吗?还是我必须在我的代码中实际添加这些斜杠和引号才能使事情正常工作?当前出现请求双引号的解析错误。

【问题讨论】:

    标签: java json spring mongodb jackson


    【解决方案1】:

    我认为你在这里遗漏了一些东西。

    MongoCursor 正在返回一个 Document 对象,而不是 String

    您是否正在调用Document.toString() 并使用字符串结果?

    您根本不需要进行任何字符串解析。您应该能够从 Mongo 获取 Document 对象并调用其上的 getter 函数以获取您需要的字段,这也将保留它们的数据类型(字符串、数字、布尔值和日期),例如检查BsonDocument 类Javadocs 上的所有函数:https://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BsonDocument.html

    【讨论】:

    • Java IDE 告诉我使用 MongoCursor。它没有任何 getter 函数,我不得不使用 tostring 来输出任何东西。我会在星期一到达那台计算机后查看 Document 对象。谢谢您的提示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2017-01-16
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多