1

I've read an example on how to use monocle to parse some deeply jsons but the example its kind of straight forward, but I've a more difficulty one that looks like this:

{
"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" : { }
    }
 },
 ...
}

I can parse it using the following code:

val productData = productConnector.getProducts(100).map(p => Serializer.fromJson[ProductInfo](p))

but I don't know how to write a lens so I can create a Map with "volumeApiName" and the "pricePerUnit", something like (gp2 -> 0.1000000000) notice that the "volumeApiName" has a "sku" that can use it to match later on on the "terms"."OnDemand"., and then get deeper into the pricePerUnit.

happygopher
  • 111
  • 1
  • 7

0 Answers0