代码之家  ›  专栏  ›  技术社区  ›  djangofan

如何使用Scala将JSON文件读入地图

  •  1
  • djangofan  · 技术社区  · 6 年前

    {
      "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)
    
    2 回复  |  直到 5 年前
        1
  •  0
  •   Antot    6 年前

    由于问题被标记为“gatling”,因此在幕后,这个lib依赖于Jackson/fasterxml进行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
    

    杰克逊的 ObjectMapper 可以创建和配置以在Scala中使用:

    // import com.fasterxml.jackson.module.scala.DefaultScalaModule
    
    val mapper = new ObjectMapper().registerModule(DefaultScalaModule)
    

    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 将包含所研究的值。

        2
  •  0
  •   James Warr    6 年前

    看看scala play库—它支持处理JSON。从您描述的内容来看,读入JSON并从任何所需节点获取字符串值应该非常简单。

    Scala Play - JSON