title: Loop over nested JSON elements in Go
body: <p>I am receiving a JSON response from an API that contains one or more "entities". The JSON looks like this:</p>
  
  <pre><code>{
      "3211": {
          "entity_id": "3211",
          "status": "complete",
          "coupon_code": "COUPON",
          "shipping_description": "Shipping - AU Courier",
          "customer_id": "2775",
          "base_discount_amount": "-50.0000",
          "base_grand_total": "149.0000",
          "base_shipping_amount": "0.0000",
          "base_shipping_tax_amount": "0.0000",
          "base_subtotal": "199.0000",
          "base_tax_amount": "0.0000",
          "base_total_paid": "149.0000",
          "base_total_refunded": null,
          "discount_amount": "-50.0000",
          "grand_total": "149.0000",
          "shipping_amount": "0.0000",
          "shipping_tax_amount": "0.0000",
          "store_to_order_rate": "1.0000",
          "subtotal": "199.0000",
          "tax_amount": "0.0000",
          "total_paid": "149.0000",
          "total_refunded": null,
          "base_shipping_discount_amount": "0.0000",
          "base_subtotal_incl_tax": "199.0000",
          "base_total_due": "0.0000",
          "shipping_discount_amount": "0.0000",
          "subtotal_incl_tax": "199.0000",
          "total_due": "0.0000",
          "increment_id": "200000423",
          "base_currency_code": "AUD",
          "discount_description": "COUPON",
          "remote_ip": "123.123.123.123",
          "store_currency_code": "AUD",
          "store_name": "Australia",
          "created_at": "2017-07-17 03:07:40",
          "shipping_incl_tax": "0.0000",
          "payment_method": "ewayrapid_ewayone",
          "gift_message_from": null,
          "gift_message_to": null,
          "gift_message_body": null,
          "tax_name": null,
          "tax_rate": null,
          "addresses": [
              {
                  "region": "South Australia",
                  "postcode": "5000",
                  "lastname": "Doe",
                  "street": "Level 6\n25 Example Street",
                  "city": "Adelaide",
                  "email": "example@email.com",
                  "telephone": "+61 123 456 789",
                  "country_id": "AU",
                  "firstname": "John",
                  "address_type": "billing",
                  "prefix": null,
                  "middlename": null,
                  "suffix": null,
                  "company": null
              },
              {
                  "region": "South Australia",
                  "postcode": "5000",
                  "lastname": "Doe",
                  "street": "Level 6\n25 Example Street",
                  "city": "Adelaide",
                  "email": "example@email.com",
                  "telephone": "+61 123 456 789",
                  "country_id": "AU",
                  "firstname": "John",
                  "address_type": "shipping",
                  "prefix": null,
                  "middlename": null,
                  "suffix": null,
                  "company": null
              }
          ]
      }
  }
  </code></pre>
  
  <p>I have written the following <code>struct</code> types:</p>
  
  <pre><code>type Orders map[string]Order
  type Order struct {
      EntityID                   string                    `json:"entity_id"`
      Status                     string                    `json:"status"`
      CouponCode                 string                    `json:"coupon_code"`
      ShippingDescription        string                    `json:"shipping_description"`
      CustomerID                 string                    `json:"customer_id"`
      BaseDiscountAmount         string                    `json:"base_discount_amount"`
      BaseGrandTotal             string                    `json:"base_grand_total"`
      BaseShippingAmount         string                    `json:"base_shipping_amount"`
      BaseShippingTaxAmount      string                    `json:"base_shipping_tax_amount"`
      BaseSubtotal               string                    `json:"base_subtotal"`
      BaseTaxAmount              string                    `json:"base_tax_amount"`
      BaseTotalPaid              string                    `json:"base_total_paid"`
      BaseTotalRefunded          string                    `json:"base_total_refunded"`
      DiscountAmount             string                    `json:"discount_amount"`
      GrandTotal                 string                    `json:"grand_total"`
      ShippingAmount             string                    `json:"shipping_amount"`
      ShippingTaxAmount          string                    `json:"shipping_tax_amount"`
      StoreToOrderRate           string                    `json:"store_to_order_rate"`
      Subtotal                   string                    `json:"subtotal"`
      TaxAmount                  string                    `json:"tax_amount"`
      TotalPaid                  string                    `json:"total_paid"`
      TotalRefunded              string                    `json:"total_refunded"`
      BaseShippingDiscountAmount string                    `json:"base_shipping_discount_amount"`
      BaseSubtotalInclTax        string                    `json:"base_subtotal_incl_tax"`
      BaseTotalDue               string                    `json:"base_total_due"`
      ShippingDiscountAmount     string                    `json:"shipping_discount_amount"`
      SubtotalInclTax            string                    `json:"subtotal_incl_tax"`
      TotalDue                   string                    `json:"total_due"`
      IncrementID                string                    `json:"increment_id"`
      BaseCurrencyCode           string                    `json:"base_currency_code"`
      DiscountDescription        string                    `json:"discount_description"`
      RemoteIP                   string                    `json:"remote_ip"`
      StoreCurrencyCode          string                    `json:"store_currency_code"`
      StoreName                  string                    `json:"store_name"`
      CreatedAt                  string                    `json:"created_at"`
      ShippingInclTax            string                    `json:"shipping_incl_tax"`
      PaymentMethod              string                    `json:"payment_method"`
      TaxName                    string                    `json:"tax_name"`
      TaxRate                    string                    `json:"tax_rate"`
      Addresses                  map[string]OrderAddresses `json:"addresses"`
  }
  
  type OrderAddresses []struct {
      Region      string  `json:"region"`
      Postcode    string  `json:"postcode"`
      Lastname    string  `json:"lastname"`
      Street      string  `json:"street"`
      City        string  `json:"city"`
      Email       string  `json:"email"`
      Telephone   string  `json:"telephone"`
      CountryID   string  `json:"country_id"`
      Firstname   string  `json:"firstname"`
      AddressType string  `json:"address_type"`
      Prefix      *string `json:"prefix"`
      Middlename  *string `json:"middlename"`
      Suffix      *string `json:"suffix"`
      Company     *string `json:"company"`
  }
  </code></pre>
  
  <p>I am then trying to process it like so (the <code>getFromOrdersAPI(page)</code> function returns the JSON mentioned above in the <code>Orders</code> type):</p>
  
  <pre><code>for page := 1; page &lt; 3; page++ {
      orders := getFromOrdersAPI(page)
      for _, order := range orders {
          //Process all the order items except addresses
          fmt.Println("Processing entity:", orders.EntityID)
  
          for _, orderaddress := range order.Addresses {
              //Trying to access address values - example below
              fmt.Println(orderaddress.Region)
          }
      }
  }
  </code></pre>
  
  <p>When running this, I get the error:</p>
  
  <blockquote>
    <p>orderaddress.Region undefined (type OrderAddresses has no field or method Region)</p>
  </blockquote>
  
  <p>Where am I going wrong?</p>