Я работаю над модулем API в Scala, который запрашивает базу данных и возвращает извлеченные данные в формате JSON в качестве ответа.
Для определенного атрибута в JSON (тип Option[String]
) мне нужно изменить значение, извлеченное из БД, на основе определенных условий.
В настоящее время мой ответ JSON выглядит так:
.....
{
"id": "1",
"name": "abc",
"osType": "windows",
"osVersion": "10.0.14393"
},
{
"id": "2",
"name": "xyz",
"osType": "ubuntu",
"osVersion": "18.04"
},
{
"id": "3",
"name": "pqr",
"osType": "windows",
"osVersion": "6.1.7601"
},
......
Мне нужно заменить следующие значения на osVersion
для записей с "osType": "windows"
if osVersion = 10.0.14393 , then Windows Server 2016
if osVersion starts with 6.1 , then Windows Server 2008 R2
Так что желаемый результат выглядит так:
.....
{
"id": "1",
"name": "abc",
"osType": "windows",
"osVersion": "Windows Server 2016"
},
{
"id": "2",
"name": "xyz",
"osType": "ubuntu",
"osVersion": "18.04"
},
{
"id": "3",
"name": "pqr",
"osType": "windows",
"osVersion": "Windows Server 2008 R2"
},
......
Я пытался использовать if-else
и pattern-matching
, но не могу правильно заменить, так как тип Option[String]
.
Вот как я пытался:
(1) * * 1016
def translateOSVersion (osType :Option[String] ,osVersion : Option[String]):Option[String] ={
if (osType == "windows"){
val version = if (osVersion =="10.0.14393")
{
Some("Windows Server 2016")
}
else {osVersion}
version
}
}
val oSVersion = translateOSVersion(ostr("osType") ,ostr("osVersion") )
<modelJSON>(id, name, ostr("osType"), oSVersion)
(2)
def translateOSVersion (osType :Option[String] ,osVersion : Option[String]) ={
if (osType == "windows"){
val version = if (osVersion =="10.0.14393") Some("Windows Server 2016")
else osVersion
}
}
val oSVersion = Some(translateOSVersion(ostr("osType") ,ostr("osVersion") ).toString)
<modelJSON>(id, name, ostr("osType"), oSVersion)
* * Тысяча двадцать-одиной (3) * * тысяча двадцать-дв
def translateOSVersion (osType :Option[String] ,osVersion : Option[String]) ={
if (osType == "windows"){
osVersion match {
case Some("10.0.14393") => "Windows Server 2016"
case x =>x
}
}
}
val oSVersion = Some(translateOSVersion(ostr("osType") ,ostr("osVersion") ).toString)
<modelJSON>(id, name, ostr("osType"), oSVersion)
Все подходы не дают желаемого результата.
Пожалуйста, помогите здесь.