Scala &引用\&引用;及&引用;将文档从Json添加到mongo DB时添加

Scala &引用\&引用;及&引用;将文档从Json添加到mongo DB时添加,scala,play-reactivemongo,Scala,Play Reactivemongo,我的json看起来像这样 [ {"name": "AABC Register Ltd (Architects accredited in building conservation), with effect from the 2016 to 2017 tax year"}, {"name": "Academic and Research Surgery Society of"}, {"name": "Academic Gaming and Simulation in Educati

我的json看起来像这样

[
  {"name": "AABC Register Ltd (Architects accredited in building conservation), with effect from the 2016 to 2017 tax year"},
  {"name": "Academic and Research Surgery Society of"},
  {"name": "Academic Gaming and Simulation in Education and Training Society for"},
  {"name": "Academic Primary Care Society for"}
]
我用来解析它并将其添加到mongoDB的代码如下

val sourceOrganisations: JsValue = Json.parse(getClass.getResourceAsStream("/json/ApprovedOrganisations.json"))

val organisations: Seq[String] = (sourceOrganisations.as[JsArray] \\ "name").map(jsval => jsval.toString())

println(organisations)

organisations.foreach(organisation => this.insert(Organisation(organisation)))
我什么时候得到的

{ "_id" : ObjectId("5c3dcf309770222486f50b4a"), "name" : "\"Accounting Association American\"" }
但是我想要这个

{ "_id" : ObjectId("5c3dcf309770222486f50b4a"), "name" : "Accounting Association American" }
我试着寻找为什么会有额外的报价,但找不到原因

val organisations: Seq[String] = (sourceOrganisations.as[JsArray] \\ "name").map(jsval => jsval.toString().replaceAll("\"",""))
增加
将所有(\“”,“”)替换为行以修复它。不知道为什么它会添加qoutes,但问题是因为您正在对JsValue执行toString

当您对JsValue(JsString)执行toString时,您会得到一个字符串,该字符串的值为
“value\u inside\u JsString”

正确的方法是首先将其强制转换为JsString,然后通过
.value
获取其值

val correctString = "[[" + jsValue.as[JsString].value + "]]"
// correctString: String = [[a]]
所以

这将为您提供
jsval
的JSON表示形式。如果这是一个JsString,它将是双引号(可能是转义的)文本内容

您可能希望将JSON解析为一个case类(
sourceorganization=JSON.parse(something).as[TheCaseClass]
)。这样,您还可以避免使用
jsArray\\\\“name”


或者至少是从最后的
jsval
(如果你知道它是一个JsString,你可以做
jsval.as[String]
)中提取字符串。

它添加了引号,因为是你要求的。
jsval.toString
生成一个JSON编码为
jsval
的字符串。你可以做
as[String]
直接。但更好的做法是为整个结构创建一个case类,并执行
val myData=Json.parse(jsonString).as[MyStructure]
@Thilo是的,但这是在基本了解实际情况之后,因为使用了“宏”“生成的
Reader
Writer
隐藏了整个逻辑流程。没错,这些都有点粗糙。”。
val correctString = "[[" + jsValue.as[JsString].value + "]]"
// correctString: String = [[a]]
val json = Json.parse(jsonString)

val organizationsAsJsValues = json match {
  case jsArray: JsArray => jsArray \\ "name"
  case _ => Seq.empty[JsValue]
}

val organizationAsNames = organizationsAsJsValues.flatMap({
  case jsString: JsString => Some(jsString.value)
  case _ => None
})

val organizations = organizationAsNames.map(name => Organization(name))
jsval => jsval.toString()