You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin的JSONObject中添加Date对象以推送至MongoDB?

如何在Kotlin的JSONObject中添加Date对象以推送至MongoDB?

这个问题我之前也踩过坑!你用的org.json.JSONObject本身是遵循标准JSON规范的,而JSON原生并没有Date类型,所以它会把任何非JSON原生类型的对象(比如Instant)直接调用toString()转成字符串,这就是为什么你的日期最终变成了ISO格式的字符串,MongoDB收到后自然就存成字符串类型了。

下面给你两个靠谱的解决思路,优先推荐第一种:

  • 推荐方案:直接用MongoDB官方驱动的Document类
    这是最适配MongoDB的方式,因为org.bson.Document是MongoDB驱动专门提供的类,天生支持BSON数据类型(包括专门的Date类型),完全不用纠结字符串转日期的问题。直接替换掉原来的JSONObject就行:

    import org.bson.Document
    import java.time.Instant
    
    fun main() {
        val mongoDoc = Document()
        mongoDoc.put("first", "a")
        mongoDoc.put("second", "b")
        // 直接传入Instant或者java.util.Date都可以,驱动会自动处理成BSON Date
        mongoDoc.put("date", Instant.now())
        
        // 之后直接把这个mongoDoc传给MongoDB的insert/update方法就好
    }
    

    这样MongoDB收到后会把date字段存成真正的Date对象,后续你想用MongoDB的日期聚合、格式化等操作都完全没问题。如果你的驱动版本稍旧,可能需要把Instant转成java.util.Date(用Date.from(Instant.now())),新的驱动版本已经直接支持java.time系列类型了。

  • 如果必须保留org.json.JSONObject的替代方案
    要是因为项目限制必须用org.json.JSONObject,那可以在转成MongoDB可识别的格式时手动修正日期字段:

    import org.json.JSONObject
    import org.bson.Document
    import java.time.Instant
    
    fun main() {
        val json = JSONObject()
        json.put("first", "a")
        json.put("second", "b")
        json.put("date", Instant.now().toString())
        
        // 先把JSON转成Document,再手动把字符串日期转成Instant
        val doc = Document.parse(json.toString())
        doc.put("date", Instant.parse(doc.getString("date")))
        
        // 最后把处理后的doc传给MongoDB
    }
    

    不过这个方法有点画蛇添足,不如直接用Document来得省心,所以还是优先推荐第一种方案。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:19:37