如何将JSON字符串转换为BSONDocument

夏天的夜晚

我具有以下使用reactmonmongo驱动程序的函数,实际上可以很好地写入数据库。

def writeDocument() = {
    val document = BSONDocument(
      "firstName" -> "Stephane",
      "lastName" -> "Godbillon",
      "age" -> 29)

    val future = collection.insert(document)

    future.onComplete {
      case Failure(e) => throw e
      case Success(result) => {
        println("successfully inserted document with result = " + result)
      }
    }
  }

但是该功能的局限性在于将JSON硬编码到BSONDocument中。如何更改它,以便可以将任何JSON字符串传递给函数?

简短的问题:如何将JSON字符串转换为BSONDocument?

更新2:

package controllers

//import play.api.libs.json._
//import reactivemongo.bson._
//import play.api.libs.json.Json

import scala.util.{Success, Failure}
import reactivemongo.api._
//import scala.concurrent.ExecutionContext.Implicits.global


import play.modules.reactivemongo.json.collection._
import reactivemongo.play.json._

object Mongo {

  //val collection = connect()

  def collection: JSONCollection = {
    val driver = new MongoDriver
    val connection = driver.connection(List("localhost"))
    val db = connection("superman")
    db.collection[JSONCollection]("IncomingRequests")
  }


  // TODO: Make this work with any JSON String
  def writeDocument() = {

    val jsonString = """{
                       | "guid": "alkshdlkasjd-ioqweuoiquew-123132",
                       | "title": "Hello-2016",
                       | "year": 2016,
                       | "action": "POST",
                       | "start": "2016-12-20",
                       | "stop": "2016-12-30"}"""


    val document = Json.parse(jsonString)
    val future = collection.insert(document)
    future.onComplete {
      case Failure(e) => throw e
      case Success(result) => {
        println("successfully inserted document with result = " + result)
      }
    }
  }

}

现在的问题是import reactivemongo.play.json._(在我的IntelliJ上)被视为未使用的导入,我仍然收到以下错误

[info] Compiling 9 Scala sources and 1 Java source to /Users/superman/target/scala-2.11/classes...
[error] /Users/superman/app/controllers/Mongo.scala:89: No Json serializer as JsObject found for type play.api.libs.json.JsValue. Try to implement an implicit OWrites or OFormat for this type.
[error] Error occurred in an application involving default arguments.
[error]     val future = collection.insert(document)
[error]                                   ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
[error] application - 

! @6oo00g47n - Internal server error, for (POST) [/validateJson] ->

play.sbt.PlayExceptions$CompilationException: Compilation error[No Json serializer as JsObject found for type play.api.libs.json.JsValue. Try to implement an implicit OWrites or OFormat for this type.
Error occurred in an application involving default arguments.]
        at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
        at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
        at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
        at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na]
        at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
        at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
        at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
        at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na]
路加

首先,您可以使用reactmongo将模型类序列化为BSON。检查文档以了解操作方法。

如果您想通过play json制作一个BSONDocument,则String可以使用

val playJson: JsValue = Json.parse(jsonString)
val bson: BSONDocument = play.modules.reactivemongo.json.BSONFormats.reads(playJson).get

编辑

我在这里的文档中找到了更多:

http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html

您可以导入这两个

import reactivemongo.play.json._
import play.modules.reactivemongo.json.collection._

代替使用默认的Collection实现(该实现与BSON结构+ BSONReader / BSONWriter交互),我们使用与JsObject + Reads / Writes一起使用的专门实现。

因此,您可以这样创建专门的集合(必须为def,而不是val):

def collection: JSONCollection = db.collection[JSONCollection]("persons")

从现在开始,您可以将其与play json一起使用,而不是与BSON一起使用,因此只需将其Json.parse(jsonString)作为要插入的文档传递就可以了。您可以在链接中查看更多示例。

编辑2我得到了要编译的代码:

包控制器

import play.api.libs.concurrent.Execution.Implicits._
import play.api.libs.json._
import play.modules.reactivemongo.json.collection.{JSONCollection, _}
import reactivemongo.api.MongoDriver
import reactivemongo.play.json._
import play.api.libs.json.Reads._

import scala.util.{Failure, Success}


object Mongo {

  def collection: JSONCollection = {
    val driver = new MongoDriver
    val connection = driver.connection(List("localhost"))
    val db = connection("superman")
    db.collection[JSONCollection]("IncomingRequests")
  }

  def writeDocument() = {

   val jsonString = """{
                       | "guid": "alkshdlkasjd-ioqweuoiquew-123132",
                       | "title": "Hello-2016",
                       | "year": 2016,
                       | "action": "POST",
                       | "start": "2016-12-20",
                       | "stop": "2016-12-30"}"""


    val document = Json.parse(jsonString).as[JsObject]
    val future = collection.insert(document)
    future.onComplete {
      case Failure(e) => throw e
      case Success(result) =>
        println("successfully inserted document with result = " + result)
    }
  }
}

重要的进口是

import play.api.libs.json.Reads._

而且您需要JsObject,而不仅仅是JsValue

val document = Json.parse(jsonString).as[JsObject]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何将interface {}转换为字符串?

来自分类Dev

如何将字符串转换为JSON,然后从JSON对象提取所需的值?

来自分类Dev

如何将JSON转换为数组或字符串?

来自分类Dev

如何将具有JSON字符串的数组转换为JSON对象(红宝石)

来自分类Dev

如何将JSON数组转换为字符串..?

来自分类Dev

如何将字符串转换为BSON?

来自分类Dev

如何将字符串转换为枚举?

来自分类Dev

JS:如何将字符串转换为JS对象(**不**转换为JSON)?

来自分类Dev

如何将MultiIndex转换为字符串类型

来自分类Dev

如何将嵌入的(引用的)json字符串转换为json

来自分类Dev

如何将字符串转换为JSON友好字符串?

来自分类Dev

如何将JSON字符串转换为数字?

来自分类Dev

如何将SinkRecord转换为JSON字符串?

来自分类Dev

如何将字符串(带有scape字符的json)转换为动态对象?

来自分类Dev

如何将字符串转换为Unicode字符

来自分类Dev

如何将字符串json转换为python float并返回json中的数字

来自分类Dev

如何将列表映射转换为json字符串和json到列表映射

来自分类Dev

如何将嵌入的(引用的)json字符串转换为json

来自分类Dev

如何将JSON字符串转换为NSArray?

来自分类Dev

如何将字符串转换为JSON并转换回?

来自分类Dev

如何将具有JSON字符串的数组转换为JSON对象(红宝石)

来自分类Dev

如何将字符从数组转换为字符串

来自分类Dev

如何将JSON字符串转换为JSON

来自分类Dev

如何将JSON字符串转换为NSArray

来自分类Dev

如何将字符数组转换为字符串

来自分类Dev

如何将 JSON 转换为 php 字符串

来自分类Dev

如何将 JSON 数组转换为 JSON 字符串 jquery

来自分类Dev

如何将字符串转换为字符

来自分类Dev

如何将 JSON 转换为字符串?

Related 相关文章

  1. 1

    如何将interface {}转换为字符串?

  2. 2

    如何将字符串转换为JSON,然后从JSON对象提取所需的值?

  3. 3

    如何将JSON转换为数组或字符串?

  4. 4

    如何将具有JSON字符串的数组转换为JSON对象(红宝石)

  5. 5

    如何将JSON数组转换为字符串..?

  6. 6

    如何将字符串转换为BSON?

  7. 7

    如何将字符串转换为枚举?

  8. 8

    JS:如何将字符串转换为JS对象(**不**转换为JSON)?

  9. 9

    如何将MultiIndex转换为字符串类型

  10. 10

    如何将嵌入的(引用的)json字符串转换为json

  11. 11

    如何将字符串转换为JSON友好字符串?

  12. 12

    如何将JSON字符串转换为数字?

  13. 13

    如何将SinkRecord转换为JSON字符串?

  14. 14

    如何将字符串(带有scape字符的json)转换为动态对象?

  15. 15

    如何将字符串转换为Unicode字符

  16. 16

    如何将字符串json转换为python float并返回json中的数字

  17. 17

    如何将列表映射转换为json字符串和json到列表映射

  18. 18

    如何将嵌入的(引用的)json字符串转换为json

  19. 19

    如何将JSON字符串转换为NSArray?

  20. 20

    如何将字符串转换为JSON并转换回?

  21. 21

    如何将具有JSON字符串的数组转换为JSON对象(红宝石)

  22. 22

    如何将字符从数组转换为字符串

  23. 23

    如何将JSON字符串转换为JSON

  24. 24

    如何将JSON字符串转换为NSArray

  25. 25

    如何将字符数组转换为字符串

  26. 26

    如何将 JSON 转换为 php 字符串

  27. 27

    如何将 JSON 数组转换为 JSON 字符串 jquery

  28. 28

    如何将字符串转换为字符

  29. 29

    如何将 JSON 转换为字符串?

热门标签

归档