如何使用Scala将JSON文件读入映射
如何使用Scala将JSON文件读入地图。我一直在尝试实现这一点,但我正在阅读的JSON是嵌套JSON,因此我没有找到一种方法轻松地将JSON提取到键中。Scala似乎也希望将嵌套的JSON字符串转换为对象。相反,我希望嵌套的JSON作为字符串“value”。我希望有人能澄清或给我一个提示,我可能会这样做 我的JSON源代码可能如下所示:如何使用Scala将JSON文件读入映射,scala,gatling,jsonpath,Scala,Gatling,Jsonpath,如何使用Scala将JSON文件读入地图。我一直在尝试实现这一点,但我正在阅读的JSON是嵌套JSON,因此我没有找到一种方法轻松地将JSON提取到键中。Scala似乎也希望将嵌套的JSON字符串转换为对象。相反,我希望嵌套的JSON作为字符串“value”。我希望有人能澄清或给我一个提示,我可能会这样做 我的JSON源代码可能如下所示: { "authKey": "34534645645653455454363", "member": { "memberId": "whatev
{
"authKey": "34534645645653455454363",
"member": {
"memberId": "whatever",
"firstName": "Jon",
"lastName": "Doe",
"address": {
"line1": "Whatever Rd",
"city": "White Salmon",
"state": "WA",
"zip": "98672"
},
"anotherProp": "wahtever",
}
}
我想将这个JSON提取到一个包含两个键的映射中,而不必钻取嵌套的JSON。这可能吗?一旦我有了映射,我的意图就是将键值添加到我的POST请求头中,如下所示:
val sentHeaders = Map("Content-Type" -> "application/javascript",
"Accept" -> "text/html", "authKey" -> extractedValue,
"member" -> theMemberInfoAsStringJson)
http("Custom headers")
.post("myUrl")
.headers(sentHeaders)
看看scala play库——它支持处理JSON。根据您的描述,读入JSON并从任何所需节点获取字符串值应该非常简单
由于问题被标记为“gatling”,因此在幕后,这个库依赖于Jackson/fasterxml进行JSON处理,因此我们可以利用它 无法直接以字符串形式检索JSON的嵌套结构化部分,但只需很少的额外代码,仍然可以获得结果 因此,输入JSON:
val json = """{
| "authKey": "34534645645653455454363",
| "member": {
| "memberId": "whatever",
| "firstName": "Jon",
| "lastName": "Doe",
| "address": {
| "line1": "Whatever Rd",
| "city": "White Salmon",
| "state": "WA",
| "zip": "98672"
| },
| "anotherProp": "wahtever"
| }
|}""".stripMargin
可以创建并配置Jackson的ObjectMapper
,以便在Scala中使用:
// import com.fasterxml.jackson.module.scala.DefaultScalaModule
val mapper = new ObjectMapper().registerModule(DefaultScalaModule)
要轻松解析输入json,专用的case类非常有用:
case class SrcJson(authKey: String, member: Any) {
val memberAsString = mapper.writeValueAsString(member)
}
我们还包括val memberAsString
,它将包含我们的目标JSON字符串,该字符串是通过从最初解析的member
进行反向转换而获得的,它实际上是一个Map
现在,要解析输入json:
val parsed = mapper.readValue(json, classOf[SrcJson])
参考
parsed.authKey
和parsed.memberAsString
将包含所研究的值。这是否意味着您只对一级键感兴趣?是的,只对一级键感兴趣。所以,我希望第一级值是字符串,而不是json/object。在gatlinglibs文件夹中,没有jackson模块scala依赖项的jar。我假设这就是获得com.fasterxml.jackson.module.scala包的方法?您需要在build.sbt中添加依赖项。谢谢您的回答。此外,gatling似乎有一个内置的用于读取Json的“Feeder”。我需要调查,我不想使用游戏库。如果我想导入一个库,我会安装json.simple或Groovy all来获取json slurper。