我已经阅读了一个关于如何使用单片眼镜来解析一些深度 json 的示例,但该示例有点直截了当,但我有一个更困难的例子,看起来像这样:
{
"products": {
"HY3BZPP2B6K8MSJF" : {
"sku" : "HY3BZPP2B6K8MSJF",
"productFamily" : "Storage",
"attributes" : {
"servicecode" : "AmazonEC2",
"location" : "US East (N. Virginia)",
"locationType" : "AWS Region",
"storageMedia" : "SSD-backed",
"volumeType" : "General Purpose",
"maxVolumeSize" : "16 TiB",
"maxIopsvolume" : "16000",
"maxIopsBurstPerformance" : "3000 for volumes <= 1 TiB",
"maxThroughputvolume" : "250 MiB/s",
"usagetype" : "EBS:VolumeUsage.gp2",
"operation" : "",
"servicename" : "Amazon Elastic Compute Cloud",
"volumeApiName" : "gp2"
}
},
...
},
"terms" : {
"OnDemand" : {
"HY3BZPP2B6K8MSJF" : {
"HY3BZPP2B6K8MSJF.JRTCKXETXF" : {
"offerTermCode" : "JRTCKXETXF",
"sku" : "HY3BZPP2B6K8MSJF",
"effectiveDate" : "2021-10-01T00:00:00Z",
"priceDimensions" : {
"HY3BZPP2B6K8MSJF.JRTCKXETXF.6YS6EN2CT7" : {
"rateCode" : "HY3BZPP2B6K8MSJF.JRTCKXETXF.6YS6EN2CT7",
"description" : "$0.10 per GB-month of General Purpose SSD (gp2) provisioned storage - US East (Northern Virginia)",
"beginRange" : "0",
"endRange" : "Inf",
"unit" : "GB-Mo",
"pricePerUnit" : {
"USD" : "0.1000000000"
},
"appliesTo" : [ ]
}
},
"termAttributes" : { }
}
},
...
}
我可以使用以下代码对其进行解析:
val productData = productConnector.getProducts(100).map(p => Serializer.fromJson[ProductInfo](p))
但我不知道如何编写镜头,所以我可以使用“volumeApiName”和“pricePerUnit”创建一个地图,例如 (gp2 -> 0.1000000000) 注意“volumeApiName”有一个可以使用它的“sku”稍后在 "terms"."OnDemand". 上进行匹配,然后更深入地了解 pricePerUnit。