Как прочитать файл JSON в карту, используя Scala - PullRequest
0 голосов
/ 25 сентября 2018

Как мне прочитать файл JSON на карту, используя Scala.Я пытался сделать это, но JSON, который я читаю, является вложенным JSon, и я не нашел способа легко извлечь JSON из ключей из-за этого.Кажется, Scala хочет также преобразовать вложенную строку JSON в объект.Вместо этого я хочу использовать вложенный JSON в качестве строкового «значения».Я надеюсь, что кто-то может уточнить или дать мне подсказку о том, как я могу это сделать.

Мой источник JSON может выглядеть примерно так:

{
  "authKey": "34534645645653455454363",
  "member": {
    "memberId": "whatever",
    "firstName": "Jon",
    "lastName": "Doe",
    "address": {
      "line1": "Whatever Rd",
      "city": "White Salmon",
      "state": "WA",
      "zip": "98672"
    },
    "anotherProp": "wahtever",
  }
}

Я хочу извлечь этот JSON вКарта из 2 ключей без сверления во вложенный JSONЭто возможно?Как только у меня появится карта, я намерен добавить значения ключей в заголовки моих запросов POST, например:

val sentHeaders = Map("Content-Type" -> "application/javascript", 
   "Accept" -> "text/html", "authKey" -> extractedValue,
   "member" -> theMemberInfoAsStringJson)
http("Custom headers")
.post("myUrl")
.headers(sentHeaders)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Поскольку вопрос помечен как «gatling», за кулисами эта библиотека зависит от Jackson / fastxml для обработки JSON, поэтому мы можем использовать его.

Нет способа извлечь вложенную структурированную частьJSON как String напрямую, но с очень небольшим количеством дополнительного кода результат все еще может быть достигнут.

Таким образом, имея вход 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)

Для простого анализа входного файла 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 будут содержать исследуемые значения.

0 голосов
/ 26 сентября 2018

взгляните на библиотеку scala play - она ​​поддерживает обработку JSON.Исходя из того, что вы описываете, читать в JSON и получать строковое значение из любого нужного узла должно быть довольно просто.

Scala Play - JSON

...