如何使用scala获取嵌套json中的元素总和?
问题描述:
我使用Scala的处理嵌套的JSON如何使用scala获取嵌套json中的元素总和?
"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使用json获得'usedBytes'的总和?
编辑:
这里是我试图
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
}
答
在foldLeft(B)所示,最后一个表达式是一个赋值(注释),它返回单元。
val datastoreCapacity = disks
val usableSpace = datastoreCapacity.foldLeft(0L) { // A
case (sumOfUsedSpace, esxDevice) =>
val sumOfTotalBytesOnStorageDevice = esxDevice.datastores.foldLeft(0L) { // B
case (totalBytesOnDevice, datastore) =>
// totalBytesOnDevice + ut..getOrElse(0L).toString.toLong
/* Note --> val sum = */ // assignment returns Unit
datastore.utilization.foldLeft(0L) { // C
case (total,util) =>
total + util.usedBytes.getOrElse(0L).toString.toLong
}
}
sumOfUsedSpace + sumOfTotalBytesOnStorageDevice
}
@Bob请参阅我的编辑。 – user3322141 2014-10-10 16:34:26
'usedBytes'属性是字符串还是long?如果是字符串,则将读取'getOrElse(0L).toString'的代码变为'getOrElse(“0”)'。顺便说一句,你的算法的结果是什么。它通常看起来你需要什么。 – 2014-10-10 16:38:49
@bob usedBytes很长 – user3322141 2014-10-10 16:47:36