title: Golang custom unmarshalling nested JSON
body: <p>I have a JSON object that looks like this. It contains 3 meals a day for one week, for 21 total entries, since each meal is an individual entry.</p>
  
  <pre><code>{
      "name": "MealPlan 1508620645147",
      "items": [
          {
              "day": 1,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":869953,\"imageType\":\"jpg\",\"title\":\"Cream Cheese &amp; Fruit Breakfast Pastries\"}"
          },
          {
              "day": 1,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":537176,\"imageType\":\"jpg\",\"title\":\"Leftover Rice Casserole\"}"
          },
          {
              "day": 1,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":595927,\"imageType\":\"jpg\",\"title\":\"Spinach and Cheddar Quiche\"}"
          },
          {
              "day": 2,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":536716,\"imageType\":\"jpg\",\"title\":\"Candied Pecan Waffles\"}"
          },
          {
              "day": 2,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":893265,\"imageType\":\"jpg\",\"title\":\"Tahini Date Smoothie Bowls\"}"
          },
          {
              "day": 2,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":512880,\"imageType\":\"jpg\",\"title\":\"Grilled Caprese Salad Sandwich for #SundaySupper\"}"
          },
          {
              "day": 3,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":648647,\"imageType\":\"jpg\",\"title\":\"Jumbo Blueberry Muffins\"}"
          },
          {
              "day": 3,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":548554,\"imageType\":\"jpg\",\"title\":\"Brie, Pesto, and Sweet Pepper Grilled Cheese\"}"
          },
          {
              "day": 3,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":438024,\"imageType\":\"jpg\",\"title\":\"Mother's Manicotti\"}"
          },
          {
              "day": 4,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":681594,\"imageType\":\"jpg\",\"title\":\"Huevos Rancheros\"}"
          },
          {
              "day": 4,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":99184,\"imageType\":\"jpg\",\"title\":\"Black Bean Tacos\"}"
          },
          {
              "day": 4,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":604514,\"imageType\":\"jpg\",\"title\":\"Cheddar Scallion Dutch Baby\"}"
          },
          {
              "day": 5,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":622672,\"imageType\":\"jpg\",\"title\":\"Cinnamon-Sugar Streusel Baked French Toast\"}"
          },
          {
              "day": 5,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":636178,\"imageType\":\"jpg\",\"title\":\"Broccoli Cheddar Soup, A Panera Bread Co. Copycat\"}"
          },
          {
              "day": 5,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":452482,\"imageType\":\"jpg\",\"title\":\"Slow Cooker Macaroni and Cheese I\"}"
          },
          {
              "day": 6,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":157272,\"imageType\":\"jpg\",\"title\":\"Pomegranate-Nutella Waffles\"}"
          },
          {
              "day": 6,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":619111,\"imageType\":\"jpg\",\"title\":\"Barley, Bulgur and Vegetable Vegan Casserole\"}"
          },
          {
              "day": 6,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":510089,\"imageType\":\"jpg\",\"title\":\"Stovetop Mac and Cheese\"}"
          },
          {
              "day": 7,
              "mealPlanId": 0,
              "slot": 1,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":551869,\"imageType\":\"jpg\",\"title\":\"Berry Smoothie\"}"
          },
          {
              "day": 7,
              "mealPlanId": 0,
              "slot": 2,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":590452,\"imageType\":\"jpg\",\"title\":\"Cheesy Baked Pasta with Eggplant and Artichokes\"}"
          },
          {
              "day": 7,
              "mealPlanId": 0,
              "slot": 3,
              "position": 0,
              "type": "RECIPE",
              "value": "{\"id\":590452,\"imageType\":\"jpg\",\"title\":\"Cheesy Baked Pasta with Eggplant and Artichokes\"}"
          }
      ]
  }
  </code></pre>
  
  <p>I want to unmarshal it into an array of structs that will hold 3 meals each as Breakfast, Lunch, Dinner. So, I want my struct to look like this, where <code>ID</code> is the <code>value.id</code> field from the JSON, and <code>Name</code> is the <code>value.title</code> field from the JSON, <code>Breakfast</code> is the item with <code>slot:1</code>, Lunch is the item with <code>slot:2</code> and <code>Dinner</code> is the item with <code>slot:3</code>.</p>
  
  <pre><code>type Day struct {
      Breakfast meal
      Lunch meal
      Dinner meal
  }
  
  type meal struct {
      ID   int
      Name string
  }
  </code></pre>
  
  <p>How can I accomplish this in Go? My initial thought was to create an intermediate <code>struct</code> that holds all the data from the JSON, and then create another <code>struct</code> by using just the fields I need. How can I do this without using the intermediary <code>struct</code> ?</p>