Scala JSON Если ключ соответствует значению, возвращается строка - PullRequest
0 голосов
/ 30 марта 2020

У меня есть ответ JSon, как указано ниже. Если метаданные «Органический» = «истина», то label = 'true-Organi c', в противном случае метка = 'non-Organi c' в конце => вернуть список или карту [modelId, label]

import net.liftweb.json.{DefaultFormats, _}


object test1 extends App {

  val json_response =
    """{
  "requestId": "91ee60d5f1b45e#316",
  "error": null,
  "errorMessages": [
  ],
  "entries": [

  {

    "modelId":"RT001",
    "sku": "SKU-ASC001",
    "store": "New Jersey",
    "ttlInSeconds": 8000,
    "metadata": {
      "manufactured_date": "2019-01-22T01:25Z",
      "organic": "true"
    }
  },
  {

    "modelId":"RT002",
    "sku": "SKU-ASC002",
    "store": "livingstone",
    "ttlInSeconds": 8000,
    "metadata": {
      "manufactured_date": "2019-10-03T01:25Z",
      "organic": "false"
    }
  }

  ] }"""

попробовал так:

 val json = parse(json_response)
  implicit val formats = DefaultFormats
  var map = Map[String, String]()

  case class Sales(modelId: String, sku: String, store: String, ttlInSeconds: Int, metadata:
  Map[String, String])

  case class Response(entries: List[Sales])

  val response = json.extract[Response]

После этого не уверен, как поступить.

1 Ответ

1 голос
/ 30 марта 2020

Это простая операция map в поле entries:

response.entries.map{ e =>
  e.modelId -> 
    if (e.metadata.get("organic").contains("true")) {
      "true-Organic"
    } else {
      "non-Organic"
    }
}

Это вернет List[(String, String)], но вы можете позвонить toMap, чтобы превратить это в Map, если требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...