Niedawno zacząłem pracować nad Scalą. Poszedłem śledzić tablicę JSON:

[
  {
     "id": "1",
    "formatType": "text",
    "value": "bgyufcie huis huids hufhsduhfsl hd"
  },
  {
    "id": "2",
    "formatType": "text size",
    "value": 12
  },
  {
    "id": "3",
    "formatType": "text alignment",
    "value" : "right"
  }
]

Próbuję odzyskać JSON z tej tablicy na podstawie ID. Na przykład, jeśli identyfikator jest 2, a następnie chcę podskoczyć

 {
        "id": "2",
        "formatType": "text size",
        "value": 12
      }

I tak dalej dla innych identyfikatorów. Napisałem kod, który porównuje identyfikator i zwróciłem mnie JSON, który jest następujący.

val getid = jsonString.parseJson match {
      case JsArray(elements) => elements.map(x => if(x.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key) x)
    }

Ten kod działa dobrze, gdy w tablicy JSON mam tylko jeden JSON. Ale kiedy mam wiele JSON z identyfikatorem, jak pokazano powyżej, kod ten porównuje tylko ostatni rekord. W tym przypadku jest tylko porównywanie danych z ID 3. Nie porównuje się z ID 1 i ID 2, a którego nie jestem w stanie uzyskać pożądanych wyników. Próbowałem użyć dla każdego tutaj, ale to nie zadziałało dla mnie. Dla każdej drukowania pełne dane w postaciach. Jak mogę sprawdzić wszystkie rekordy w mojej tablicy JSON i ID i zwróć?

-3
Lozy 1 sierpień 2020, 10:29

1 odpowiedź

Najlepsza odpowiedź

Zgadzam się z komentarzami na temat nie zadawania wielu pytań i patrząc na istniejące odpowiedzi (i akceptując poprawne odpowiedzi!).

Jednak w tym konkretnym przypadku wystarczy użyć find, a nie map:

val getid = jsonString.parseJson match {
  case JsArray(elements) =>
    elements.find(_.asJsObject().getFields("Id")(0).toString().replace("\"", "") == key)
  case _ =>
    None
}

Spowoduje to powróci None Jeśli nie znaleziono id lub JSON nie jest a JsArray, w przeciwnym razie powróci Some(element)

Bardziej ogólnie, a nie przetwarzanie obiektów surowych JSON, polecam użycie biblioteki, która konwertuje całą JSON do obiektów Scala, a następnie przetwarzanie tych obiektów Scali.

1
Tim 1 sierpień 2020, 09:29