如何使用Scala获得json中所有元素的总和?
我有以下建议-如何使用Scala获得json中所有元素的总和?,json,list,scala,Json,List,Scala,我有以下建议- "disks" : [ { "name" : "v2.16", "diskAggregate" : "aggr0", "diskRPM" : 15000, "totalSizeBytes" : 1077477376, "vendorId" : "NETAPP ", "usedBytes" : 1070071808, "diskType" : "FCAL", "uuid" : "4E455441:50502020:5
"disks" : [ {
"name" : "v2.16",
"diskAggregate" : "aggr0",
"diskRPM" : 15000,
"totalSizeBytes" : 1077477376,
"vendorId" : "NETAPP ",
"usedBytes" : 1070071808,
"diskType" : "FCAL",
"uuid" : "4E455441:50502020:56442D31:3030304D:422D465A:2D353230:32353836:30303030:00000000:00000000",
"portName" : "FC:A ",
"raidGroup" : "rg0"
},
{
"name" : "v4.16",
"diskAggregate" : "aggr0",
"diskRPM" : 15000,
"totalSizeBytes" : 1077477376,
"vendorId" : "NETAPP ",
"usedBytes" : 1070071808,
"diskType" : "FCAL",
"uuid" : "4E455441:50502020:56442D31:3030304D:422D465A:2D353230:32353633:34333030:00000000:00000000",
"portName" : "FC:B ",
"raidGroup" : "rg0"
}]
我想从json数组“磁盘”中的所有json对象中添加usedBytes。
我在Scala中试用了fold,但没有得到想要的输出。
这是我的密码-
val datastoreCapacity = disks
val usableSpace = datastoreCapacity.foldLeft(0L) {
case (sumOfUsedSpace, esxDevice) =>
val sumOfTotalBytesOnStorageDevice = esxDevice.datastores.foldLeft(0L) {
case (totalBytesOnDevice, datastore) =>
// totalBytesOnDevice + ut..getOrElse(0L).toString.toLong
val sum = datastore.utilization.foldLeft(0L) {
case (total,util) =>
total + util.usedBytes.getOrElse(0L).toString.toLong
}
}
sumOfUsedSpace + sumOfTotalBytesOnStorageDevice
}
如何使用Scala获取已使用字节的总数?假设磁盘是一个已解析对象的列表,其中包含一个名为usedBytes returning选项Long的getter(如代码所示),则应该执行以下操作:
disks.map(_.usedBytes).flatten.sum
一些解释:
- 使用
我们用给定的lambda函数转换所有对象(实际上只调用gettermap
)usedBytes
过滤掉所有flatten
s,并在列表中保留None
s的值。(也可用于列表列表或向量数组等)Some
只是按照它所说的做,并构建一组数值的sum
(我们从sum
中得到)展平
根据您的评论猜测,我假设,尽管有上面的示例数据,磁盘还是有一个属性“利用率”。我不知道这是什么样子,也不知道这意味着什么,因为你的问题不清楚,但如果我假设这是一个磁盘列表的话。然后你可以做下面的事情
disks.flatMap(_.utilization.map(_.usedBytes).flatten).sum
如果这不是您要查找的数据,请指定要处理的数据。它将只遍历到数据存储。。如何访问“利用率”中的密钥?@Vishwas“利用率”是什么意思?如果你想要完整的答案,你应该发布数据模型类