thoughtbot / Argo

Functional JSON parsing library for Swift
https://thoughtbot.com
MIT License
3.49k stars 198 forks source link

1.0 Performance #132

Closed piercifani closed 9 years ago

piercifani commented 9 years ago

Hi guys!

Thanks a lot for pushing 1.0 with it's new and shiny Decoded type, enabling us to debug issues 10x faster!

However, with this release, the parse performance also decreased 10x 😟. After updating to 1.0.1 I'm seeing awful performances. Check the numbers out:

Argo 0.4.3 [Debug]

Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' started.
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' measured [Time, seconds] average: 0.267, relative standard deviation: 29.484%, values: [0.269623, 0.499241, 0.232326, 0.228493, 0.229797, 0.243571, 0.238932, 0.262057, 0.220336, 0.246017], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' passed (2.925 seconds).

Argo 1.0.1 [Debug]

Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' started.
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' measured [Time, seconds] average: 3.554, relative standard deviation: 27.028%, values: [3.128513, 6.430360, 3.222164, 3.189515, 3.234787, 3.267992, 3.223700, 3.252472, 3.215294, 3.376277], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' passed (35.798 seconds).

Compiling for Release didn't help at all:

Argo 1.0.1 (Release)

Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' started.
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' measured [Time, seconds] average: 3.419, relative standard deviation: 24.304%, values: [5.908040, 3.140881, 3.022495, 3.137567, 3.165376, 3.128669, 3.184138, 3.187963, 3.154218, 3.158545], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100
Test Case '-[WallaKitTests.WallPageTests testWallPageParsePerformance]' passed (34.444 seconds).

I've profiled the app and I'm attaching the Instruments trace here

Is there anything I can do to give you guys a hand with this issue?

EDIT: All tests were executed on the simulator, Core i7 2.2GHz

tonyd256 commented 9 years ago

@piercifani Would you be able to provide the exact JSON and model code here? We have a performance test in the tests for Argo and it's running pretty fast.

thm76 commented 9 years ago

@tonyd256 I have a similar issue and should be able to get you my JSON and model in the next 24 hours or so.

thm76 commented 9 years ago

Here's my model, I'm trying to load a list of recipes:

import Foundation
import Argo
import Runes

public struct Recipe {
  public let id: Int64
  public let containerId: Int64
  public let name: String
  public let summary: String?
  public let level: Int
  public let categories: [String]

  public let averageRating: Double
  public let reviewCount: Int
  public let memberRecipe: Bool

  public let singleServeVariationId: Int64?
  public let multiServeVariationId: Int64?

  public let serves: Int
  public let caloriesPerServe: Int

  public let ingredients: [String]

  public let prepTimeMins: Int
  public let preparationTips: String?
  public let preparationTipsHTML: String?
  public let marinatingRequired: Bool

  public let cookingTimeMins: Int?
  public let cookingMethod: String
  public let cookingMethodHTML: String

  public let mishTips: String
  public let mishTipsHTML: String

  public let image: ImageURL
  public let nutrition: NutritionSummary?
}

extension Recipe : Decodable {
  static func create
    (id: Int64)
    (_ containerId: Int64)
    (_ name: String)
    (_ summary: String?)
    (_ level: Int)
    (_ categories: [String])
    (_ averageRating: Double)
    (_ reviewCount: Int)
    (_ memberRecipe: Bool)
    (_ singleServeVariationId: Int64?)
    (_ multiServeVariationId: Int64?)
    (_ serves: Int)
    (_ caloriesPerServe: Int)
    (_ ingredients: [String])
    (_ prepTimeMins: Int)
    (_ preparationTips: String?)
    (_ preparationTipsHTML: String?)
    (_ marinatingRequired: Bool)
    (_ cookingTimeMins: Int?)
    (_ cookingMethod: String)
    (_ cookingMethodHTML: String)
    (_ mishTips: String)
    (_ mishTipsHTML: String)
    (_ image: ImageURL)
    (_ nutrition: NutritionSummary?)
    -> Recipe {
      return Recipe(id: id, containerId: containerId, name: name, summary: summary, level: level, categories: categories,
        averageRating: averageRating, reviewCount: reviewCount, memberRecipe: memberRecipe,
        singleServeVariationId: singleServeVariationId, multiServeVariationId: multiServeVariationId,
        serves: serves, caloriesPerServe: caloriesPerServe, ingredients: ingredients,
        prepTimeMins: prepTimeMins, preparationTips: preparationTips, preparationTipsHTML: preparationTipsHTML, marinatingRequired: marinatingRequired,
        cookingTimeMins: cookingTimeMins, cookingMethod: cookingMethod, cookingMethodHTML: cookingMethodHTML,
        mishTips: mishTips, mishTipsHTML: mishTipsHTML, image: image, nutrition: nutrition
      )
  }

  public static func decode(json: JSON) -> Decoded<Recipe> {
    let p1 = Recipe.create
      <^> json <|  "id"
      <*> json <|  "recipe_container_id"
      <*> json <|  "name"
      <*> json <|?  "summary"
      <*> json <|  "level"

    let p2 = p1
      <*> json <|| "categories"
      <*> json <|  "average_rating"
      <*> json <|  "review_count"
      <*> json <|  "member_recipe"
      <*> json <|? "single_serve_variation_id"

    let p3 = p2
      <*> json <|? "multi_serve_variation_id"
      <*> json <|  "serves"
      <*> json <|  "calories_per_serve"
      <*> json <|| "ingredients_list"
      <*> json <|  "prep_time_mins"

    let p4 = p3
      <*> json <|? "preparation_tips"
      <*> json <|? "preparation_tips_html"
      <*> json <|  "marinating_required"
      <*> json <|? "cooking_time_mins"
      <*> json <|  "cooking_method"

    return p4
      <*> json <|  "cooking_method_html"
      <*> json <|  "mish_tips"
      <*> json <|  "mish_tips_html"
      <*> json <|  "image_url"
      <*> json <|? "nutrition_summary"
  }
}

public struct ImageURL {
  public let thumb: String
  public let thumb2x: String
  public let medium: String
  public let largeThumb: String
  public let large: String
  public let magazine: String
  public let original: String
}

extension ImageURL : Decodable {
  static func create
    (thumb: String)
    (_ thumb2x: String)
    (_ medium: String)
    (_ largeThumb: String)
    (_ large: String)
    (_ magazine: String)
    (_ original: String)
    -> ImageURL {
      return ImageURL(thumb: thumb, thumb2x: thumb2x, medium: medium, largeThumb: largeThumb, large: large, magazine: magazine, original: original)
  }

  public static func decode(json: JSON) -> Decoded<ImageURL> {
    return ImageURL.create
      <^> json <| "thumb"
      <*> json <| "thumb_2x"
      <*> json <| "medium"
      <*> json <| "large_thumb"
      <*> json <| "large"
      <*> json <| "magazine"
      <*> json <| "original"
  }
}

public struct NutritionSummary {
  public let energyKJ: Double
  public let proteinG: Double
  public let fatTotalG: Double
  public let fatSaturatedG: Double
  public let carboHydratesG: Double
  public let sugarsG: Double
  public let sodiumMG: Double
  public let fibreG: Double
  public let highProtein: Bool
  public let highCarb: Bool
  public let lowCarb: Bool
  public let lowFat: Bool
  public let highFibre: Bool
  public let lowSodium: Bool
  public let lactoseFree: Bool
  public let glutenFree: Bool
  public let vegetarian: Bool
  public let calculatedCalories: Int
  public let calculatedWeight: Int
}

extension NutritionSummary : Decodable {
  static func create
    (energyKJ: Double)
    (_ proteinG: Double)
    (_ fatTotalG: Double)
    (_ fatSaturatedG: Double)
    (_ carboHydratesG: Double)
    (_ sugarsG: Double)
    (_ sodiumMG: Double)
    (_ fibreG: Double)
    (_ highProtein: Bool)
    (_ highCarb: Bool)
    (_ lowCarb: Bool)
    (_ lowFat: Bool)
    (_ highFibre: Bool)
    (_ lowSodium: Bool)
    (_ lactoseFree: Bool)
    (_ glutenFree: Bool)
    (_ vegetarian: Bool)
    (_ calculatedCalories: Int)
    (_ calculatedWeight: Int)
    -> NutritionSummary {
      return NutritionSummary(energyKJ: energyKJ, proteinG: proteinG, fatTotalG: fatTotalG,
        fatSaturatedG: fatSaturatedG, carboHydratesG: carboHydratesG, sugarsG: sugarsG,
        sodiumMG: sodiumMG, fibreG: fibreG, highProtein: highProtein, highCarb: highCarb,
        lowCarb: lowCarb, lowFat: lowFat, highFibre: highFibre, lowSodium: lowSodium,
        lactoseFree: lactoseFree, glutenFree: glutenFree, vegetarian: vegetarian,
        calculatedCalories: calculatedCalories, calculatedWeight: calculatedWeight)
  }

  public static func decode(json: JSON) -> Decoded<NutritionSummary> {
    let p1 = NutritionSummary.create
      <^> json <| "energy_in_kj"
      <*> json <| "protein_in_g"
      <*> json <| "fat_total_in_g"
      <*> json <| "fat_saturated_in_g"
      <*> json <| "carbohydrates_in_g"

    let p2 = p1
      <*> json <| "sugars_in_g"
      <*> json <| "sodium_in_mg"
      <*> json <| "fibre_in_g"
      <*> json <| "high_protein?"
      <*> json <| "high_carb?"

    let p3 = p2
      <*> json <| "low_carb?"
      <*> json <| "low_fat?"
      <*> json <| "high_fibre?"
      <*> json <| "low_sodium?"
      <*> json <| "lactose_free?"

    return p3
      <*> json <| "gluten_free?"
      <*> json <| "vegetarian?"
      <*> json <| "calculated_calories"
      <*> json <| "calculated_weight"
  }
}
thm76 commented 9 years ago

And here's the JSON:

    [  
       {  
          "average_rating":3.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":450,
          "cooking_method":"# Place 2 slices of bread onto a board. Spread almond spread over, then cottage cheese. Scatter with currants.\n# Top with carrot, spinach leaves and cucumber. Finish with remaining bread slices.",
          "cooking_method_html":"<ol>\n\t<li>Place 2 slices of bread onto a board. Spread almond spread over, then cottage cheese. Scatter with currants.</li>\n\t<li>Top with carrot, spinach leaves and cucumber. Finish with remaining bread slices.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2014-08-07T15:44:44+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":7803,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Nut___Ricotta_Sandwich_LR.jpg",
          "image_file_size":1574067,
          "image_fingerprint":"a38e7bae6e08cefff1836068b14fe97e",
          "image_updated_at":"2014-09-18T21:55:01+10:00",
          "level":2,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"",
          "mish_tips_html":"",
          "name":"Almond & Cottage Cheese Salad Sandwich",
          "prep_time_mins":10,
          "preparation_tips":null,
          "preparation_tips_html":"",
          "public_seo_description":"A delicious and easy to prepare sandwich that uses cottage cheese and almond spread. Suitable for vegetarians and diabetics. Perfect for a quick lunch or light dinner and ready to eat in under 15 minutes. A healthy, low calorie meal option which uses a tasty combination of flavours and textures. This sandwich can be made in advance for a low calorie packed lunch.",
          "published_at":"2014-09-09T00:00:00+10:00",
          "recipe_container_id":1592,
          "review_count":1,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-nut-ricotta-sandwich",
          "summary":null,
          "updated_at":"2015-02-01T15:55:19+11:00",
          "multi_serve_variation_id":9418,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/7803/thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "thumb_2x":"/system/images/7803/thumb_2x/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "medium":"/system/images/7803/medium/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large_thumb":"/system/images/7803/large_thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large":"/system/images/7803/large/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "magazine":"/system/images/7803/magazine/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "original":"/system/images/7803/original/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg"
          },
          "ingredients_list":[  
             "4 slices Wholegrain Bread (160g)",
             "40g Almond Spread",
             "80g Low Fat Cottage Cheese",
             "45g Dried Currants",
             "1  Carrot (61g), grated",
             "40g Baby Spinach",
             "1  Lebanese Cucumber (135g), sliced"
          ],
          "traffic_light":"green",
          "permalink":"almond-nut-ricotta-sandwich",
          "country_code":"AU"
       },
       {  
          "average_rating":4.5417,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":326,
          "cooking_method":"# Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.\n# Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.",
          "cooking_method_html":"<ol>\n\t<li>Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.</li>\n\t<li>Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2014-08-07T15:39:01+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":7801,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Nut___Ricotta_Sandwich_LR.jpg",
          "image_file_size":1574067,
          "image_fingerprint":"a38e7bae6e08cefff1836068b14fe97e",
          "image_updated_at":"2014-09-18T21:54:45+10:00",
          "level":0,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"",
          "mish_tips_html":"",
          "name":"Almond & Ricotta Salad Sandwich",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A delicious and easy to prepare sandwich that uses ricotta and almond spread. Suitable for vegetarians and diabetics. Perfect for a quick lunch or light dinner and ready to eat in under 15 minutes. A healthy, low calorie meal option which uses a tasty combination of flavours and textures. This sandwich can be made in advance for a low calorie packed lunch.",
          "published_at":"2014-09-09T00:00:00+10:00",
          "recipe_container_id":1592,
          "review_count":27,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-nut-ricotta-sandwich",
          "summary":null,
          "updated_at":"2015-02-01T15:52:44+11:00",
          "multi_serve_variation_id":9416,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/7801/thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "thumb_2x":"/system/images/7801/thumb_2x/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "medium":"/system/images/7801/medium/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large_thumb":"/system/images/7801/large_thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large":"/system/images/7801/large/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "magazine":"/system/images/7801/magazine/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "original":"/system/images/7801/original/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg"
          },
          "ingredients_list":[  
             "4 slices Wholegrain Bread (160g)",
             "20g Almond Spread",
             "50g Reduced Fat Ricotta",
             "15g Dried Currants",
             "1  Carrot (61g), grated",
             "20g Alfalfa Sprouts",
             "20g Baby Spinach",
             "1  Lebanese Cucumber (135g), sliced"
          ],
          "traffic_light":"green",
          "permalink":"almond-nut-ricotta-sandwich",
          "country_code":"AU"
       },
       {  
          "average_rating":0.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":404,
          "cooking_method":"# Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.\n# Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.",
          "cooking_method_html":"<ol>\n\t<li>Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.</li>\n\t<li>Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2014-08-07T15:41:55+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":7802,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Nut___Ricotta_Sandwich_LR.jpg",
          "image_file_size":1574067,
          "image_fingerprint":"a38e7bae6e08cefff1836068b14fe97e",
          "image_updated_at":"2014-09-18T21:54:53+10:00",
          "level":1,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"",
          "mish_tips_html":"",
          "name":"Almond & Ricotta Salad Sandwich",
          "prep_time_mins":10,
          "preparation_tips":null,
          "preparation_tips_html":"",
          "public_seo_description":"A delicious and easy to prepare sandwich that uses ricotta and almond spread. Suitable for vegetarians and diabetics. Perfect for a quick lunch or light dinner and ready to eat in under 15 minutes. A healthy, low calorie meal option which uses a tasty combination of flavours and textures. This sandwich can be made in advance for a low calorie packed lunch.",
          "published_at":"2014-09-09T00:00:00+10:00",
          "recipe_container_id":1592,
          "review_count":0,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-nut-ricotta-sandwich",
          "summary":null,
          "updated_at":"2015-02-01T15:53:17+11:00",
          "multi_serve_variation_id":9417,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/7802/thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "thumb_2x":"/system/images/7802/thumb_2x/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "medium":"/system/images/7802/medium/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large_thumb":"/system/images/7802/large_thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large":"/system/images/7802/large/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "magazine":"/system/images/7802/magazine/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "original":"/system/images/7802/original/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg"
          },
          "ingredients_list":[  
             "4 slices Wholegrain Bread (160g)",
             "30g Almond Spread",
             "60g Reduced Fat Ricotta",
             "40g Dried Currants",
             "1  Carrot (61g), grated",
             "40g Alfalfa Sprouts",
             "40g Baby Spinach",
             "1  Lebanese Cucumber (135g), sliced"
          ],
          "traffic_light":"green",
          "permalink":"almond-nut-ricotta-sandwich",
          "country_code":"AU"
       },
       {  
          "average_rating":4.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":469,
          "cooking_method":"# Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.\n# Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.",
          "cooking_method_html":"<ol>\n\t<li>Place 2 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.</li>\n\t<li>Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2014-08-07T15:45:57+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":7804,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Nut___Ricotta_Sandwich_LR.jpg",
          "image_file_size":1574067,
          "image_fingerprint":"a38e7bae6e08cefff1836068b14fe97e",
          "image_updated_at":"2014-09-18T21:55:09+10:00",
          "level":3,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"",
          "mish_tips_html":"",
          "name":"Almond & Ricotta Salad Sandwich",
          "prep_time_mins":10,
          "preparation_tips":null,
          "preparation_tips_html":"",
          "public_seo_description":"A delicious and easy to prepare sandwich that uses ricotta and almond spread. Suitable for vegetarians and diabetics. Perfect for a quick lunch or light dinner and ready to eat in under 15 minutes. A healthy, low calorie meal option which uses a tasty combination of flavours and textures. This sandwich can be made in advance for a low calorie packed lunch.",
          "published_at":"2014-09-09T00:00:00+10:00",
          "recipe_container_id":1592,
          "review_count":1,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-nut-ricotta-sandwich",
          "summary":null,
          "updated_at":"2015-02-01T15:54:50+11:00",
          "multi_serve_variation_id":9419,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/7804/thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "thumb_2x":"/system/images/7804/thumb_2x/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "medium":"/system/images/7804/medium/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large_thumb":"/system/images/7804/large_thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large":"/system/images/7804/large/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "magazine":"/system/images/7804/magazine/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "original":"/system/images/7804/original/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg"
          },
          "ingredients_list":[  
             "4 slices Wholegrain Bread (160g)",
             "40g Almond Spread",
             "100g Reduced Fat Ricotta",
             "45g Dried Currants",
             "1  Carrot (61g), grated",
             "40g Alfalfa Sprouts",
             "40g Baby Spinach",
             "1  Lebanese Cucumber (135g), sliced"
          ],
          "traffic_light":"green",
          "permalink":"almond-nut-ricotta-sandwich",
          "country_code":"AU"
       },
       {  
          "average_rating":0.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":512,
          "cooking_method":"# Place 3 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.\n# Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.",
          "cooking_method_html":"<ol>\n\t<li>Place 3 slices of bread onto a board. Spread almond spread over, then ricotta. Scatter with currants.</li>\n\t<li>Top with carrot, sprouts, spinach leaves and cucumber. Finish with remaining bread slices.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2014-08-07T15:46:44+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":7805,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Nut___Ricotta_Sandwich_LR.jpg",
          "image_file_size":1574067,
          "image_fingerprint":"a38e7bae6e08cefff1836068b14fe97e",
          "image_updated_at":"2014-09-18T21:55:16+10:00",
          "level":4,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"",
          "mish_tips_html":"",
          "name":"Almond & Ricotta Salad Sandwich",
          "prep_time_mins":10,
          "preparation_tips":null,
          "preparation_tips_html":"",
          "public_seo_description":"A delicious and easy to prepare sandwich that uses ricotta and almond spread. Suitable for vegetarians and diabetics. Perfect for a quick lunch or light dinner and ready to eat in under 15 minutes. A healthy, low calorie meal option which uses a tasty combination of flavours and textures. This sandwich can be made in advance for a low calorie packed lunch.",
          "published_at":"2014-09-09T00:00:00+10:00",
          "recipe_container_id":1592,
          "review_count":0,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-nut-ricotta-sandwich",
          "summary":null,
          "updated_at":"2015-02-01T15:56:15+11:00",
          "multi_serve_variation_id":9420,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/7805/thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "thumb_2x":"/system/images/7805/thumb_2x/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "medium":"/system/images/7805/medium/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large_thumb":"/system/images/7805/large_thumb/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "large":"/system/images/7805/large/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "magazine":"/system/images/7805/magazine/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg",
             "original":"/system/images/7805/original/Almond_Nut___Ricotta_Sandwich_LRa38e7bae6e08cefff1836068b14fe97e.jpg"
          },
          "ingredients_list":[  
             "6 slices Wholegrain Bread (240g)",
             "30g Almond Spread",
             "80g Reduced Fat Ricotta",
             "40g Dried Currants",
             "1  Carrot (61g), grated",
             "40g Alfalfa Sprouts",
             "40g Baby Spinach",
             "1  Lebanese Cucumber (135g), sliced"
          ],
          "traffic_light":"green",
          "permalink":"almond-nut-ricotta-sandwich",
          "country_code":"AU"
       },
       {  
          "average_rating":4.6176,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":147,
          "cooking_method":"# Cut the apple into 4 slices\n# Sandwich the slices with the almond spread.",
          "cooking_method_html":"<ol>\n\t<li>Cut the apple into 4 slices</li>\n\t<li>Sandwich the slices with the almond spread.</li>\n</ol>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2012-11-20T14:24:11+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":334,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Spread_Apple_Snack_LR.jpg",
          "image_file_size":301015,
          "image_fingerprint":"497442f1911a3ecb537ffe36c875b63d",
          "image_updated_at":"2014-09-18T09:08:54+10:00",
          "level":0,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up._\r\n* _Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories & taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up.</em></li>\n\t<li><em>Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories &amp; taste.</em></li>\n</ul>",
          "name":"Almond Spread Apple Stack",
          "prep_time_mins":5,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A pre-work out must!  This protein packed snack can be prepared in under five minutes or make it in advance for a snack on the go.  A quick, simple snack using only an apple and almond spread.  A crunchy, tasty, low calorie treat.",
          "published_at":"2012-11-20T00:00:00+11:00",
          "recipe_container_id":310,
          "review_count":123,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-spread-apple-stack",
          "summary":" \u201cI love this on my way to a cardio workout. It has carbs, fibre and a small amount of protein and it\u2019s not too heavy in your belly\u201d\r\nThanks SheHasCuteShoes for this great recipe.\r\n\r\n",
          "updated_at":"2015-04-15T10:14:09+10:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Snack",
             "Fruit based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/334/thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "thumb_2x":"/system/images/334/thumb_2x/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "medium":"/system/images/334/medium/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "large_thumb":"/system/images/334/large_thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "large":"/system/images/334/large/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "magazine":"/system/images/334/magazine/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
             "original":"/system/images/334/original/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg"
          },
          "ingredients_list":[  
             "1  Red Apple (150g)",
             "2 teaspoons Almond Spread (10g)"
          ],
          "traffic_light":"green",
          "permalink":"almond-spread-apple-stack",
          "country_code":"AU"
       },
       {  
          "average_rating":4.8571,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":147,
          "cooking_method":"# Cut the apple into 4 slices.  \r\n# Sandwich the slices with the almond spread. ",
          "cooking_method_html":"<ol>\n\t<li>Cut the apple into 4 slices.</li>\n\t<li>Sandwich the slices with the almond spread.</li>\n</ol>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T15:12:39+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":875,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
          "image_file_size":301015,
          "image_fingerprint":"497442f1911a3ecb537ffe36c875b63d",
          "image_updated_at":"2014-09-18T09:56:56+10:00",
          "level":1,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up._\r\n* _Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories & taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up.</em></li>\n\t<li><em>Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories &amp; taste.</em></li>\n</ul>",
          "name":"Almond Spread Apple Stack",
          "prep_time_mins":5,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A pre-work out must!  This protein packed snack can be prepared in under five minutes or make it in advance for a snack on the go.  A quick, simple snack using only an apple and almond spread.  A crunchy, tasty, low calorie treat.",
          "published_at":"2012-11-20T00:00:00+11:00",
          "recipe_container_id":310,
          "review_count":7,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-spread-apple-stack",
          "summary":" \u201cI love this on my way to a cardio workout. It has carbs, fibre and a small amount of protein and it\u2019s not too heavy in your belly\u201d\r\nThanks SheHasCuteShoes for this great recipe.\r\n\r\n",
          "updated_at":"2014-12-05T07:45:46+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Snack",
             "Fruit based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/875/thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "thumb_2x":"/system/images/875/thumb_2x/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "medium":"/system/images/875/medium/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large_thumb":"/system/images/875/large_thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large":"/system/images/875/large/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "magazine":"/system/images/875/magazine/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "original":"/system/images/875/original/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg"
          },
          "ingredients_list":[  
             "1  Red Apple (150g)",
             "2 teaspoons Almond Spread (10g)"
          ],
          "traffic_light":"green",
          "permalink":"almond-spread-apple-stack",
          "country_code":"AU"
       },
       {  
          "average_rating":5.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":147,
          "cooking_method":"# Cut the apple into 4 slices.  \r\n# Sandwich the slices with the almond spread. ",
          "cooking_method_html":"<ol>\n\t<li>Cut the apple into 4 slices.</li>\n\t<li>Sandwich the slices with the almond spread.</li>\n</ol>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T15:12:58+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":876,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
          "image_file_size":301015,
          "image_fingerprint":"497442f1911a3ecb537ffe36c875b63d",
          "image_updated_at":"2014-09-18T09:57:02+10:00",
          "level":2,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up._\r\n* _Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories & taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up.</em></li>\n\t<li><em>Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories &amp; taste.</em></li>\n</ul>",
          "name":"Almond Spread Apple Stack",
          "prep_time_mins":5,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A pre-work out must!  This protein packed snack can be prepared in under five minutes or make it in advance for a snack on the go.  A quick, simple snack using only an apple and almond spread.  A crunchy, tasty, low calorie treat.",
          "published_at":"2012-11-20T00:00:00+11:00",
          "recipe_container_id":310,
          "review_count":4,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-spread-apple-stack",
          "summary":" \u201cI love this on my way to a cardio workout. It has carbs, fibre and a small amount of protein and it\u2019s not too heavy in your belly\u201d\r\nThanks SheHasCuteShoes for this great recipe.\r\n\r\n",
          "updated_at":"2014-12-05T07:46:00+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Snack",
             "Fruit based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/876/thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "thumb_2x":"/system/images/876/thumb_2x/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "medium":"/system/images/876/medium/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large_thumb":"/system/images/876/large_thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large":"/system/images/876/large/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "magazine":"/system/images/876/magazine/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "original":"/system/images/876/original/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg"
          },
          "ingredients_list":[  
             "1  Red Apple (150g)",
             "2 teaspoons Almond Spread (10g)"
          ],
          "traffic_light":"green",
          "permalink":"almond-spread-apple-stack",
          "country_code":"AU"
       },
       {  
          "average_rating":4.5714,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":147,
          "cooking_method":"# Cut the apple into 4 slices.  \r\n# Sandwich the slices with the almond spread. ",
          "cooking_method_html":"<ol>\n\t<li>Cut the apple into 4 slices.</li>\n\t<li>Sandwich the slices with the almond spread.</li>\n</ol>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T15:13:19+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":877,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
          "image_file_size":301015,
          "image_fingerprint":"497442f1911a3ecb537ffe36c875b63d",
          "image_updated_at":"2014-09-18T09:57:07+10:00",
          "level":3,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up._\r\n* _Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories & taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up.</em></li>\n\t<li><em>Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories &amp; taste.</em></li>\n</ul>",
          "name":"Almond Spread Apple Stack",
          "prep_time_mins":5,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A pre-work out must!  This protein packed snack can be prepared in under five minutes or make it in advance for a snack on the go.  A quick, simple snack using only an apple and almond spread.  A crunchy, tasty, low calorie treat.",
          "published_at":"2012-11-20T00:00:00+11:00",
          "recipe_container_id":310,
          "review_count":9,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-spread-apple-stack",
          "summary":" \u201cI love this on my way to a cardio workout. It has carbs, fibre and a small amount of protein and it\u2019s not too heavy in your belly\u201d\r\nThanks SheHasCuteShoes for this great recipe.\r\n\r\n",
          "updated_at":"2014-12-05T07:46:12+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Snack",
             "Fruit based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/877/thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "thumb_2x":"/system/images/877/thumb_2x/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "medium":"/system/images/877/medium/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large_thumb":"/system/images/877/large_thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large":"/system/images/877/large/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "magazine":"/system/images/877/magazine/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "original":"/system/images/877/original/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg"
          },
          "ingredients_list":[  
             "1  Red Apple (150g)",
             "2 teaspoons Almond Spread (10g)"
          ],
          "traffic_light":"green",
          "permalink":"almond-spread-apple-stack",
          "country_code":"AU"
       },
       {  
          "average_rating":0.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":147,
          "cooking_method":"# Cut the apple into 4 slices.  \r\n# Sandwich the slices with the almond spread. ",
          "cooking_method_html":"<ol>\n\t<li>Cut the apple into 4 slices.</li>\n\t<li>Sandwich the slices with the almond spread.</li>\n</ol>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T15:13:35+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":878,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d.jpg",
          "image_file_size":301015,
          "image_fingerprint":"497442f1911a3ecb537ffe36c875b63d",
          "image_updated_at":"2014-09-18T09:57:12+10:00",
          "level":4,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up._\r\n* _Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories & taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Try using cashew or brazil nut spread instead. If your spread is too runny, keep it in the fridge or pop it in the freezer for few hours to firm it up.</em></li>\n\t<li><em>Member recipes are ones that have been submitted to 12WBT when requested which tick all the boxes in terms of health, nutrition, calories &amp; taste.</em></li>\n</ul>",
          "name":"Almond Spread Apple Stack",
          "prep_time_mins":5,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A pre-work out must!  This protein packed snack can be prepared in under five minutes or make it in advance for a snack on the go.  A quick, simple snack using only an apple and almond spread.  A crunchy, tasty, low calorie treat.",
          "published_at":"2012-11-20T00:00:00+11:00",
          "recipe_container_id":310,
          "review_count":0,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almond-spread-apple-stack",
          "summary":" \u201cI love this on my way to a cardio workout. It has carbs, fibre and a small amount of protein and it\u2019s not too heavy in your belly\u201d\r\nThanks SheHasCuteShoes for this great recipe.\r\n\r\n",
          "updated_at":"2014-12-05T07:47:01+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Snack",
             "Fruit based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/878/thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "thumb_2x":"/system/images/878/thumb_2x/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "medium":"/system/images/878/medium/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large_thumb":"/system/images/878/large_thumb/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "large":"/system/images/878/large/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "magazine":"/system/images/878/magazine/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg",
             "original":"/system/images/878/original/Almond_Spread_Apple_Snack_LR497442f1911a3ecb537ffe36c875b63d497442f1911a3ecb537ffe36c875b63d.jpg"
          },
          "ingredients_list":[  
             "1  Red Apple (150g)",
             "2 teaspoons Almond Spread (10g)"
          ],
          "traffic_light":"green",
          "permalink":"almond-spread-apple-stack",
          "country_code":"AU"
       },
       {  
          "average_rating":4.413,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":149,
          "cooking_method":"Enjoy!",
          "cooking_method_html":"<p>Enjoy!</p>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2012-08-31T14:48:47+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":297,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almonds_LR.jpg",
          "image_file_size":262470,
          "image_fingerprint":"5d8d93adf262a7ba0b1079ab50819ef2",
          "image_updated_at":"2014-09-18T09:05:34+10:00",
          "level":0,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!\r\n* Limit snacks to 100-150 cals each.",
          "mish_tips_html":"<ul>\n\t<li>Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!</li>\n\t<li>Limit snacks to 100-150 cals each.</li>\n</ul>",
          "name":"Almonds",
          "prep_time_mins":0,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":null,
          "published_at":"2012-08-31T00:00:00+10:00",
          "recipe_container_id":275,
          "review_count":54,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almonds",
          "summary":"Choose \"no added salt\" and raw almonds if possible. You can substitue for other nuts, but just keep an eye on the difference in calories.",
          "updated_at":"2015-03-26T10:09:00+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Low FODMAP",
             "Snack",
             "Low Carb based snacks",
             "Protein based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/297/thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "thumb_2x":"/system/images/297/thumb_2x/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "medium":"/system/images/297/medium/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large_thumb":"/system/images/297/large_thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large":"/system/images/297/large/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "magazine":"/system/images/297/magazine/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "original":"/system/images/297/original/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg"
          },
          "ingredients_list":[  
             "25g Almonds"
          ],
          "traffic_light":"green",
          "permalink":"almonds",
          "country_code":"AU"
       },
       {  
          "average_rating":5.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":149,
          "cooking_method":"Enjoy!",
          "cooking_method_html":"<p>Enjoy!</p>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T14:57:31+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":870,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
          "image_file_size":262470,
          "image_fingerprint":"5d8d93adf262a7ba0b1079ab50819ef2",
          "image_updated_at":"2014-09-18T09:56:30+10:00",
          "level":1,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!\r\n* Limit snacks to 100-150 cals each.",
          "mish_tips_html":"<ul>\n\t<li>Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!</li>\n\t<li>Limit snacks to 100-150 cals each.</li>\n</ul>",
          "name":"Almonds",
          "prep_time_mins":0,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":null,
          "published_at":"2012-08-31T00:00:00+10:00",
          "recipe_container_id":275,
          "review_count":7,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almonds",
          "summary":"Choose \"no added salt\" and raw almonds if possible. You can substitue for other nuts, but just keep an eye on the difference in calories.",
          "updated_at":"2015-03-26T10:09:15+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Low FODMAP",
             "Snack",
             "Low Carb based snacks",
             "Protein based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/870/thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "thumb_2x":"/system/images/870/thumb_2x/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "medium":"/system/images/870/medium/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large_thumb":"/system/images/870/large_thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large":"/system/images/870/large/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "magazine":"/system/images/870/magazine/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "original":"/system/images/870/original/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg"
          },
          "ingredients_list":[  
             "25g Almonds"
          ],
          "traffic_light":"green",
          "permalink":"almonds",
          "country_code":"AU"
       },
       {  
          "average_rating":2.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":149,
          "cooking_method":"Enjoy!",
          "cooking_method_html":"<p>Enjoy!</p>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T14:57:50+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":871,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
          "image_file_size":262470,
          "image_fingerprint":"5d8d93adf262a7ba0b1079ab50819ef2",
          "image_updated_at":"2014-09-18T09:56:35+10:00",
          "level":2,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!\r\n* Limit snacks to 100-150 cals each.",
          "mish_tips_html":"<ul>\n\t<li>Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!</li>\n\t<li>Limit snacks to 100-150 cals each.</li>\n</ul>",
          "name":"Almonds",
          "prep_time_mins":0,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":null,
          "published_at":"2012-08-31T00:00:00+10:00",
          "recipe_container_id":275,
          "review_count":0,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almonds",
          "summary":"Choose \"no added salt\" and raw almonds if possible. You can substitue for other nuts, but just keep an eye on the difference in calories.",
          "updated_at":"2015-03-26T10:09:30+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Low FODMAP",
             "Snack",
             "Low Carb based snacks",
             "Protein based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/871/thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "thumb_2x":"/system/images/871/thumb_2x/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "medium":"/system/images/871/medium/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large_thumb":"/system/images/871/large_thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large":"/system/images/871/large/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "magazine":"/system/images/871/magazine/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "original":"/system/images/871/original/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg"
          },
          "ingredients_list":[  
             "25g Almonds"
          ],
          "traffic_light":"green",
          "permalink":"almonds",
          "country_code":"AU"
       },
       {  
          "average_rating":5.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":149,
          "cooking_method":"Enjoy!",
          "cooking_method_html":"<p>Enjoy!</p>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T14:59:27+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":872,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
          "image_file_size":262470,
          "image_fingerprint":"5d8d93adf262a7ba0b1079ab50819ef2",
          "image_updated_at":"2014-09-18T09:56:40+10:00",
          "level":3,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!\r\n* Limit snacks to 100-150 cals each.",
          "mish_tips_html":"<ul>\n\t<li>Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!</li>\n\t<li>Limit snacks to 100-150 cals each.</li>\n</ul>",
          "name":"Almonds",
          "prep_time_mins":0,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":null,
          "published_at":"2012-08-31T00:00:00+10:00",
          "recipe_container_id":275,
          "review_count":4,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almonds",
          "summary":"Choose \"no added salt\" and raw almonds if possible. You can substitue for other nuts, but just keep an eye on the difference in calories.",
          "updated_at":"2015-03-26T10:09:53+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Low FODMAP",
             "Snack",
             "Low Carb based snacks",
             "Protein based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/872/thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "thumb_2x":"/system/images/872/thumb_2x/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "medium":"/system/images/872/medium/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large_thumb":"/system/images/872/large_thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large":"/system/images/872/large/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "magazine":"/system/images/872/magazine/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "original":"/system/images/872/original/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg"
          },
          "ingredients_list":[  
             "25g Almonds"
          ],
          "traffic_light":"green",
          "permalink":"almonds",
          "country_code":"AU"
       },
       {  
          "average_rating":2.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":149,
          "cooking_method":"Enjoy!",
          "cooking_method_html":"<p>Enjoy!</p>",
          "cooking_time_mins":0,
          "country_code":"AU",
          "created_at":"2013-02-01T14:59:50+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":873,
          "image_content_type":"image/jpeg",
          "image_file_name":"Almonds_LR5d8d93adf262a7ba0b1079ab50819ef2.jpg",
          "image_file_size":262470,
          "image_fingerprint":"5d8d93adf262a7ba0b1079ab50819ef2",
          "image_updated_at":"2014-09-18T09:56:46+10:00",
          "level":4,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!\r\n* Limit snacks to 100-150 cals each.",
          "mish_tips_html":"<ul>\n\t<li>Snacks can make or break a healthy diet plan, so make sure you count every calorie that goes into your mouth!</li>\n\t<li>Limit snacks to 100-150 cals each.</li>\n</ul>",
          "name":"Almonds",
          "prep_time_mins":0,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":null,
          "published_at":"2012-08-31T00:00:00+10:00",
          "recipe_container_id":275,
          "review_count":0,
          "serves":1,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"almonds",
          "summary":"Choose \"no added salt\" and raw almonds if possible. You can substitue for other nuts, but just keep an eye on the difference in calories.",
          "updated_at":"2015-03-26T10:10:09+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Vegetarian",
             "Lactose Free",
             "Gluten Free",
             "Low FODMAP",
             "Snack",
             "Low Carb based snacks",
             "Protein based snacks"
          ],
          "image_url":{  
             "thumb":"/system/images/873/thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "thumb_2x":"/system/images/873/thumb_2x/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "medium":"/system/images/873/medium/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large_thumb":"/system/images/873/large_thumb/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "large":"/system/images/873/large/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "magazine":"/system/images/873/magazine/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg",
             "original":"/system/images/873/original/Almonds_LR5d8d93adf262a7ba0b1079ab50819ef25d8d93adf262a7ba0b1079ab50819ef2.jpg"
          },
          "ingredients_list":[  
             "25g Almonds"
          ],
          "traffic_light":"green",
          "permalink":"almonds",
          "country_code":"AU"
       },
       {  
          "average_rating":4.1139,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":259,
          "cooking_method":"# Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft. \r\n# Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper. \r\n# Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.\r\n# Divide pasta between bowls and top with marinara sauce and oregano.",
          "cooking_method_html":"<ol>\n\t<li>Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft.</li>\n\t<li>Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper.</li>\n\t<li>Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.</li>\n\t<li>Divide pasta between bowls and top with marinara sauce and oregano.</li>\n</ol>",
          "cooking_time_mins":10,
          "country_code":"AU",
          "created_at":"2012-06-26T11:41:28+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":263,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Mapule's_Amazing_Marinara.jpg",
          "image_file_size":260341,
          "image_fingerprint":"896733766158e8fd20ae824d799f9919",
          "image_updated_at":"2014-09-18T09:02:29+10:00",
          "level":0,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Slim pasta can be found in supermarkets. If you can't find it, serve this dish as a stew._\r\n* _Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Slim pasta can be found in supermarkets. If you can&#8217;t find it, serve this dish as a stew.</em></li>\n\t<li><em>Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste.</em></li>\n</ul>",
          "name":"Amazing Marinara",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A low calorie spin on a classic and tasty dish.  Contains mixed seafood with slim pasta in a rich and spicy tomato sauce.  A satisfying flavour combination, perfect for weekend lunch or healthy dinner for the whole family and ready in just 20 minutes.  This tasty dish also works well as a stew if you prefer. A great Winter warmer.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":246,
          "review_count":194,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"mapule-s-amazing-marinara",
          "summary":"Thanks to member Mapule for this tasty, healthy version of pasta marinara. The anchovies are optional, so leave them out if you are not a fan.",
          "updated_at":"2014-12-05T07:47:44+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Lactose Free",
             "Gluten Free",
             "Lunch",
             "Dinner",
             "Low Carb",
             "Seafood"
          ],
          "image_url":{  
             "thumb":"/system/images/263/thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "thumb_2x":"/system/images/263/thumb_2x/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "medium":"/system/images/263/medium/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "large_thumb":"/system/images/263/large_thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "large":"/system/images/263/large/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "magazine":"/system/images/263/magazine/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
             "original":"/system/images/263/original/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg"
          },
          "ingredients_list":[  
             "1g Olive Oil Spray",
             "1  Onion (89g), chopped",
             "3 cloves Garlic (9g), crushed",
             "1/2 teaspoons Chilli Flakes (1g)",
             "1 fillets Anchovies (4g), chopped",
             "1 x 400g cans Diced Tomato (400g)",
             "1 tablespoons Lemon Juice (20g)",
             "300g Marinara Mix",
             "1 packets Slim Pasta (250g)",
             "2 teaspoons Fresh Oregano (2g)"
          ],
          "traffic_light":"green",
          "permalink":"mapule-s-amazing-marinara",
          "country_code":"AU"
       },
       {  
          "average_rating":3.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":437,
          "cooking_method":"# Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft. \r\n# Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper. \r\n# Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.\r\n# Divide pasta between bowls and top with marinara sauce, parmesan and oregano.",
          "cooking_method_html":"<ol>\n\t<li>Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft.</li>\n\t<li>Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper.</li>\n\t<li>Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.</li>\n\t<li>Divide pasta between bowls and top with marinara sauce, parmesan and oregano.</li>\n</ol>",
          "cooking_time_mins":10,
          "country_code":"AU",
          "created_at":"2013-01-08T11:11:14+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":532,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
          "image_file_size":260341,
          "image_fingerprint":"896733766158e8fd20ae824d799f9919",
          "image_updated_at":"2014-09-18T09:27:15+10:00",
          "level":2,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Slim pasta can be found in supermarkets. If you can't find it, serve this dish as a stew._\r\n* _Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Slim pasta can be found in supermarkets. If you can&#8217;t find it, serve this dish as a stew.</em></li>\n\t<li><em>Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste.</em></li>\n</ul>",
          "name":"Amazing Marinara ",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A low calorie spin on a classic and tasty dish.  Contains mixed seafood with slim pasta in a rich and spicy tomato sauce.  A satisfying flavour combination, perfect for weekend lunch or healthy dinner for the whole family and ready in just 20 minutes.  This tasty dish also works well as a stew if you prefer. A great Winter warmer.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":246,
          "review_count":4,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"mapule-s-amazing-marinara-1500-cals-1700-cals",
          "summary":"Thanks to member Mapule for this tasty, healthy version of pasta marinara. The anchovies are optional, so leave them out if you are not a fan.",
          "updated_at":"2014-12-05T07:48:21+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Lactose Free",
             "Gluten Free",
             "Lunch",
             "Dinner",
             "Low Carb",
             "Seafood"
          ],
          "image_url":{  
             "thumb":"/system/images/532/thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "thumb_2x":"/system/images/532/thumb_2x/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "medium":"/system/images/532/medium/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large_thumb":"/system/images/532/large_thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large":"/system/images/532/large/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "magazine":"/system/images/532/magazine/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "original":"/system/images/532/original/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg"
          },
          "ingredients_list":[  
             "1g Olive Oil Spray",
             "1  Onion (89g), chopped",
             "3 cloves Garlic (9g), crushed",
             "1/2 teaspoons Chilli Flakes (1g)",
             "1 fillets Anchovies (4g), chopped",
             "1 x 400g cans Diced Tomato (400g), diced",
             "1 tablespoons Lemon Juice (20g)",
             "400g Marinara Mix",
             "1 packets Slim Pasta (250g)",
             "60g Parmesan Cheese, finely grated",
             "2 teaspoons Fresh Oregano (2g)"
          ],
          "traffic_light":"green",
          "permalink":"mapule-s-amazing-marinara-1500-cals-1700-cals",
          "country_code":"AU"
       },
       {  
          "average_rating":4.6,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":437,
          "cooking_method":"# Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft. \r\n# Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper. \r\n# Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.\r\n# Divide pasta between bowls and top with marinara sauce, parmesan and oregano.",
          "cooking_method_html":"<ol>\n\t<li>Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft.</li>\n\t<li>Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper.</li>\n\t<li>Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.</li>\n\t<li>Divide pasta between bowls and top with marinara sauce, parmesan and oregano.</li>\n</ol>",
          "cooking_time_mins":10,
          "country_code":"AU",
          "created_at":"2013-01-08T11:11:55+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":533,
          "image_content_type":"image/jpeg",
          "image_file_name":"Amazing_Marinara.jpg",
          "image_file_size":214258,
          "image_fingerprint":"261f4cf02f75f71c97fff88249539d11",
          "image_updated_at":"2014-09-18T09:27:20+10:00",
          "level":3,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Slim pasta can be found in supermarkets. If you can't find it, serve this dish as a stew._\r\n* _Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Slim pasta can be found in supermarkets. If you can&#8217;t find it, serve this dish as a stew.</em></li>\n\t<li><em>Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste.</em></li>\n</ul>",
          "name":"Amazing Marinara ",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A low calorie spin on a classic and tasty dish.  Contains mixed seafood with slim pasta in a rich and spicy tomato sauce.  A satisfying flavour combination, perfect for weekend lunch or healthy dinner for the whole family and ready in just 20 minutes.  This tasty dish also works well as a stew if you prefer. A great Winter warmer.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":246,
          "review_count":5,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"mapule-s-amazing-marinara-1500-cals-1700-cals-1800-cals",
          "summary":"Thanks to member Mapule for this tasty, healthy version of pasta marinara. The anchovies are optional, so leave them out if you are not a fan.",
          "updated_at":"2014-12-05T07:48:49+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Lactose Free",
             "Gluten Free",
             "Lunch",
             "Dinner",
             "Low Carb",
             "Seafood"
          ],
          "image_url":{  
             "thumb":"/system/images/533/thumb/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "thumb_2x":"/system/images/533/thumb_2x/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "medium":"/system/images/533/medium/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "large_thumb":"/system/images/533/large_thumb/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "large":"/system/images/533/large/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "magazine":"/system/images/533/magazine/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg",
             "original":"/system/images/533/original/Amazing_Marinara261f4cf02f75f71c97fff88249539d11.jpg"
          },
          "ingredients_list":[  
             "1g Olive Oil Spray",
             "1  Onion (89g), chopped",
             "3 cloves Garlic (9g), crushed",
             "1/2 teaspoons Chilli Flakes (1g)",
             "1 fillets Anchovies (4g), chopped",
             "1 x 400g cans Diced Tomato (400g), diced",
             "1 tablespoons Lemon Juice (20g)",
             "400g Marinara Mix",
             "1 packets Slim Pasta (250g)",
             "60g Parmesan Cheese, finely grated",
             "2 teaspoons Fresh Oregano (2g)"
          ],
          "traffic_light":"green",
          "permalink":"mapule-s-amazing-marinara-1500-cals-1700-cals-1800-cals",
          "country_code":"AU"
       },
       {  
          "average_rating":5.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":486,
          "cooking_method":"# Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft. \r\n# Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper. \r\n# Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.\r\n# Divide pasta between bowls and top with marinara sauce, parmesan and oregano.",
          "cooking_method_html":"<ol>\n\t<li>Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft.</li>\n\t<li>Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper.</li>\n\t<li>Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.</li>\n\t<li>Divide pasta between bowls and top with marinara sauce, parmesan and oregano.</li>\n</ol>",
          "cooking_time_mins":10,
          "country_code":"AU",
          "created_at":"2013-02-01T15:09:45+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":874,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
          "image_file_size":260341,
          "image_fingerprint":"896733766158e8fd20ae824d799f9919",
          "image_updated_at":"2014-09-18T09:56:51+10:00",
          "level":4,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Slim pasta can be found in supermarkets. If you can't find it, serve this dish as a stew._\r\n* _Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Slim pasta can be found in supermarkets. If you can&#8217;t find it, serve this dish as a stew.</em></li>\n\t<li><em>Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste.</em></li>\n</ul>",
          "name":"Amazing Marinara",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A low calorie spin on a classic and tasty dish.  Contains mixed seafood with slim pasta in a rich and spicy tomato sauce.  A satisfying flavour combination, perfect for weekend lunch or healthy dinner for the whole family and ready in just 20 minutes.  This tasty dish also works well as a stew if you prefer. A great Winter warmer.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":246,
          "review_count":1,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"mapule-s-amazing-marinara",
          "summary":"Thanks to member Mapule for this tasty, healthy version of pasta marinara. The anchovies are optional, so leave them out if you are not a fan.",
          "updated_at":"2014-12-05T07:49:07+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Lactose Free",
             "Gluten Free",
             "Lunch",
             "Dinner",
             "Low Carb",
             "Seafood"
          ],
          "image_url":{  
             "thumb":"/system/images/874/thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "thumb_2x":"/system/images/874/thumb_2x/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "medium":"/system/images/874/medium/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large_thumb":"/system/images/874/large_thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large":"/system/images/874/large/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "magazine":"/system/images/874/magazine/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "original":"/system/images/874/original/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg"
          },
          "ingredients_list":[  
             "1g Olive Oil Spray",
             "1  Onion (89g), chopped",
             "3 cloves Garlic (9g), crushed",
             "1/2 teaspoons Chilli Flakes (1g)",
             "1 fillets Anchovies (4g), chopped",
             "1 x 400g cans Diced Tomato (400g), diced",
             "1 tablespoons Lemon Juice (20g)",
             "450g Marinara Mix",
             "1 packets Slim Pasta (250g)",
             "70g Parmesan Cheese, finely grated",
             "2 teaspoons Fresh Oregano (2g)"
          ],
          "traffic_light":"green",
          "permalink":"mapule-s-amazing-marinara",
          "country_code":"AU"
       },
       {  
          "average_rating":4.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":388,
          "cooking_method":"# Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft. \r\n# Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper. \r\n# Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.\r\n# Divide pasta between bowls and top with marinara sauce, parmesan and oregano.",
          "cooking_method_html":"<ol>\n\t<li>Spray a large deep non-stick frying pan with oil and heat over medium-high heat. Add onion, garlic, chilli and anchovy, if using. Cover and cook, stirring occasionally, for 3-4 minutes or until the onion is soft.</li>\n\t<li>Add tomatoes, lemon juice and \u00bc cup (60 ml) water. Cook for 2 minutes. Add marinara mix. Cover and cook for 3-4 minutes or until seafood is just cooked through. Season with freshly ground black pepper.</li>\n\t<li>Meanwhile, cook pasta in a large saucepan of boiling water following packet directions. Drain.</li>\n\t<li>Divide pasta between bowls and top with marinara sauce, parmesan and oregano.</li>\n</ol>",
          "cooking_time_mins":10,
          "country_code":"AU",
          "created_at":"2013-01-07T16:15:39+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":501,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919.jpg",
          "image_file_size":260341,
          "image_fingerprint":"896733766158e8fd20ae824d799f9919",
          "image_updated_at":"2014-09-18T09:24:23+10:00",
          "level":1,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _Slim pasta can be found in supermarkets. If you can't find it, serve this dish as a stew._\r\n* _Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste._",
          "mish_tips_html":"<ul>\n\t<li><em>Slim pasta can be found in supermarkets. If you can&#8217;t find it, serve this dish as a stew.</em></li>\n\t<li><em>Member recipes submitted to 12WBT must tick all the boxes in terms of health, nutrition, calories and taste.</em></li>\n</ul>",
          "name":"Amazing Marinara",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A low calorie spin on a classic and tasty dish.  Contains mixed seafood with slim pasta in a rich and spicy tomato sauce.  A satisfying flavour combination, perfect for weekend lunch or healthy dinner for the whole family and ready in just 20 minutes.  This tasty dish also works well as a stew if you prefer. A great Winter warmer.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":246,
          "review_count":11,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"mapule-s-amazing-marinara-1500-cals",
          "summary":"Thanks to member Mapule for this tasty, healthy version of pasta marinara. The anchovies are optional, so leave them out if you are not a fan.",
          "updated_at":"2014-12-05T07:48:00+11:00",
          "multi_serve_variation_id":null,
          "categories":[  
             "Lactose Free",
             "Gluten Free",
             "Lunch",
             "Dinner",
             "Low Carb",
             "Seafood"
          ],
          "image_url":{  
             "thumb":"/system/images/501/thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "thumb_2x":"/system/images/501/thumb_2x/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "medium":"/system/images/501/medium/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large_thumb":"/system/images/501/large_thumb/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "large":"/system/images/501/large/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "magazine":"/system/images/501/magazine/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg",
             "original":"/system/images/501/original/600_Mapule's_Amazing_Marinara896733766158e8fd20ae824d799f9919896733766158e8fd20ae824d799f9919.jpg"
          },
          "ingredients_list":[  
             "1g Olive Oil Spray",
             "1  Onion (89g), chopped",
             "3 cloves Garlic (9g), crushed",
             "1/2 teaspoons Chilli Flakes (1g)",
             "1 fillets Anchovies (4g), chopped",
             "1 x 400g cans Diced Tomato (400g), diced",
             "1 tablespoons Lemon Juice (20g)",
             "350g Marinara Mix",
             "1 packets Slim Pasta (250g)",
             "50g Parmesan Cheese, finely grated",
             "2 teaspoons Fresh Oregano (2g)"
          ],
          "traffic_light":"green",
          "permalink":"mapule-s-amazing-marinara-1500-cals",
          "country_code":"AU"
       },
       {  
          "average_rating":4.3939,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":258,
          "cooking_method":"# Cut pita in half crossways and gently open each half to make a pocket. \n# Spread inside of pita pockets with dip.\n# Divide salad leaves, carrot, capsicum, feta and artichoke between pockets.",
          "cooking_method_html":"<ol>\n\t<li>Cut pita in half crossways and gently open each half to make a pocket.</li>\n\t<li>Spread inside of pita pockets with dip.</li>\n\t<li>Divide salad leaves, carrot, capsicum, feta and artichoke between pockets.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2012-06-26T15:39:13+10:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":267,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Antipasto_Pita_Pocket.jpg",
          "image_file_size":345186,
          "image_fingerprint":"ea63f8975e915913eb4e6336a3640276",
          "image_updated_at":"2014-09-18T09:02:49+10:00",
          "level":0,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!_\r\n* _You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin._",
          "mish_tips_html":"<ul>\n\t<li><em>You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!</em></li>\n\t<li><em>You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin.</em></li>\n</ul>",
          "name":"Antipasto Pita Pocket",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A yummy snack full of antipasto treats! No cooking required and on your plate in under 10 minutes.  This low-calorie vegetarian treat contains roasted capsicum, eggplant dip, artichokes and feta with salad all wrapped up in a hearty pita.  Perfect for a deli lunch on the go.  Mix it up using hummus or tzatziki if you prefer.  An exciting combination of textures and flavours.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":250,
          "review_count":144,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"antipasto-pita-pocket",
          "summary":"We\u2019ve packed antipasto favourites into these tasty pita pockets. Feel free to replace the eggplant dip with hummus or tzatziki.",
          "updated_at":"2014-12-29T09:05:30+11:00",
          "multi_serve_variation_id":6282,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/267/thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "thumb_2x":"/system/images/267/thumb_2x/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "medium":"/system/images/267/medium/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "large_thumb":"/system/images/267/large_thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "large":"/system/images/267/large/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "magazine":"/system/images/267/magazine/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "original":"/system/images/267/original/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg"
          },
          "ingredients_list":[  
             "2 pieces Wholemeal Pita Bread (80g)",
             "2 tablespoons Eggplant Dip (40g)",
             "100g Chargrilled Capsicum, chopped",
             "10g Mixed Salad Leaves",
             "1  Carrot (61g), grated",
             "60g Low Fat Feta, thinly sliced",
             "40g Canned Artichoke Hearts, Drained, thinly sliced"
          ],
          "traffic_light":"green",
          "permalink":"antipasto-pita-pocket",
          "country_code":"AU"
       },
       {  
          "average_rating":4.6667,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":406,
          "cooking_method":"# Cut pita in half crossways and gently open each half to make a pocket. \r\n# Spread inside of pita pockets with dip and avocado.\r\n# Divide salad leaves, carrot, capsicum, feta and artichoke between pockets.\r\n\r\n",
          "cooking_method_html":"<ol>\n\t<li>Cut pita in half crossways and gently open each half to make a pocket.</li>\n\t<li>Spread inside of pita pockets with dip and avocado.</li>\n\t<li>Divide salad leaves, carrot, capsicum, feta and artichoke between pockets.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2013-01-08T11:14:19+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":534,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
          "image_file_size":345186,
          "image_fingerprint":"ea63f8975e915913eb4e6336a3640276",
          "image_updated_at":"2014-09-18T09:27:25+10:00",
          "level":1,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!_\r\n* _You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin._",
          "mish_tips_html":"<ul>\n\t<li><em>You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!</em></li>\n\t<li><em>You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin.</em></li>\n</ul>",
          "name":"Antipasto Pita Pocket",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A yummy snack full of antipasto treats! No cooking required and on your plate in under 10 minutes.  This low-calorie vegetarian treat contains roasted capsicum, eggplant dip, artichokes and feta with salad all wrapped up in a hearty pita.  Perfect for a deli lunch on the go.  Mix it up using hummus or tzatziki if you prefer.  An exciting combination of textures and flavours.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":250,
          "review_count":6,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"antipasto-pita-pocket-1500-cals",
          "summary":"We\u2019ve packed antipasto favourites into these tasty pita pockets. Feel free to replace the eggplant dip with hummus or tzatziki.",
          "updated_at":"2014-12-05T07:50:17+11:00",
          "multi_serve_variation_id":6283,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/534/thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "thumb_2x":"/system/images/534/thumb_2x/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "medium":"/system/images/534/medium/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "large_thumb":"/system/images/534/large_thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "large":"/system/images/534/large/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "magazine":"/system/images/534/magazine/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "original":"/system/images/534/original/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg"
          },
          "ingredients_list":[  
             "2 pieces Wholemeal Pita Bread (80g)",
             "2 tablespoons Eggplant Dip (40g)",
             "120g Avocado",
             "10g Mixed Salad Leaves",
             "1  Carrot (61g), grated",
             "100g Chargrilled Capsicum, chopped",
             "80g Low Fat Feta, thinly sliced",
             "40g Canned Artichoke Hearts, Drained, thinly sliced"
          ],
          "traffic_light":"green",
          "permalink":"antipasto-pita-pocket-1500-cals",
          "country_code":"AU"
       },
       {  
          "average_rating":2.0,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":451,
          "cooking_method":"# Cut pita in half crossways and gently open each half to make a pocket. \r\n# Spread inside of pita pockets with dip and avocado.\r\n# Divide salad leaves, carrot, capsicum, cheese and artichoke between pockets.\r\n ",
          "cooking_method_html":"<ol>\n\t<li>Cut pita in half crossways and gently open each half to make a pocket.</li>\n\t<li>Spread inside of pita pockets with dip and avocado.</li>\n\t<li>Divide salad leaves, carrot, capsicum, cheese and artichoke between pockets.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2013-01-08T11:16:21+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":535,
          "image_content_type":"image/jpeg",
          "image_file_name":"600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
          "image_file_size":345186,
          "image_fingerprint":"ea63f8975e915913eb4e6336a3640276",
          "image_updated_at":"2014-09-18T09:27:30+10:00",
          "level":2,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!_\r\n* _You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin._",
          "mish_tips_html":"<ul>\n\t<li><em>You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!</em></li>\n\t<li><em>You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin.</em></li>\n</ul>",
          "name":"Antipasto Pita Pocket",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A yummy snack full of antipasto treats! No cooking required and on your plate in under 10 minutes.  This low-calorie vegetarian treat contains roasted capsicum, eggplant dip, artichokes and feta with salad all wrapped up in a hearty pita.  Perfect for a deli lunch on the go.  Mix it up using hummus or tzatziki if you prefer.  An exciting combination of textures and flavours.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":250,
          "review_count":2,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"antipasto-pita-pocket-1500-cals-1700-cals",
          "summary":"We\u2019ve packed antipasto favourites into these tasty pita pockets. Feel free to replace the eggplant dip with hummus or tzatziki.",
          "updated_at":"2014-12-05T07:50:39+11:00",
          "multi_serve_variation_id":6284,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/535/thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "thumb_2x":"/system/images/535/thumb_2x/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "medium":"/system/images/535/medium/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "large_thumb":"/system/images/535/large_thumb/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "large":"/system/images/535/large/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "magazine":"/system/images/535/magazine/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg",
             "original":"/system/images/535/original/600_Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276ea63f8975e915913eb4e6336a3640276.jpg"
          },
          "ingredients_list":[  
             "2 pieces Wholemeal Pita Bread (80g)",
             "3 tablespoons Eggplant Dip (60g)",
             "150g Avocado",
             "10g Mixed Salad Leaves",
             "1  Carrot (61g), grated",
             "100g Chargrilled Capsicum, chopped",
             "50g Swiss Cheese, thinly sliced",
             "40g Canned Artichoke Hearts, Drained, thinly sliced"
          ],
          "traffic_light":"green",
          "permalink":"antipasto-pita-pocket-1500-cals-1700-cals",
          "country_code":"AU"
       },
       {  
          "average_rating":4.3333,
          "basic_collection":false,
          "calories_customised":false,
          "calories_per_serve":454,
          "cooking_method":"# Cut pita in half crossways and gently open each half to make a pocket. \r\n# Spread inside of pita pockets with dip and avocado.\r\n# Divide salad leaves, carrot, capsicum, feta and artichoke between pockets. ",
          "cooking_method_html":"<ol>\n\t<li>Cut pita in half crossways and gently open each half to make a pocket.</li>\n\t<li>Spread inside of pita pockets with dip and avocado.</li>\n\t<li>Divide salad leaves, carrot, capsicum, feta and artichoke between pockets.</li>\n</ol>",
          "cooking_time_mins":null,
          "country_code":"AU",
          "created_at":"2013-01-08T11:23:33+11:00",
          "festive_nutrition_plan_id":null,
          "has_detail_page":true,
          "id":536,
          "image_content_type":"image/jpeg",
          "image_file_name":"Antipasto_Pita_Pocket.jpg",
          "image_file_size":345186,
          "image_fingerprint":"ea63f8975e915913eb4e6336a3640276",
          "image_updated_at":"2014-09-18T09:27:36+10:00",
          "level":3,
          "marinating_required":false,
          "member_recipe":false,
          "mish_tips":"* _You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!_\r\n* _You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin._",
          "mish_tips_html":"<ul>\n\t<li><em>You can buy capsicum already chargrilled, packed in oil or a preserving liquid. Either way, drain well and pat dry with paper towels or you will end up with a soggy lunch!</em></li>\n\t<li><em>You can prepare your own grilled capsicum. Cut capsicum into flat pieces and discard seeds and core. Cook under a grill until skin is black. Cool under a piece of foil, then slip off skin.</em></li>\n</ul>",
          "name":"Antipasto Pita Pocket",
          "prep_time_mins":10,
          "preparation_tips":"",
          "preparation_tips_html":"",
          "public_seo_description":"A yummy snack full of antipasto treats! No cooking required and on your plate in under 10 minutes.  This low-calorie vegetarian treat contains roasted capsicum, eggplant dip, artichokes and feta with salad all wrapped up in a hearty pita.  Perfect for a deli lunch on the go.  Mix it up using hummus or tzatziki if you prefer.  An exciting combination of textures and flavours.",
          "published_at":"2012-06-26T00:00:00+10:00",
          "recipe_container_id":250,
          "review_count":12,
          "serves":2,
          "show_calorie_count":true,
          "show_in_index":true,
          "show_remaining_calories":false,
          "show_summary_text_on_plan":false,
          "single_serve_variation_id":null,
          "slug":"antipasto-pita-pocket-1500-cals-1700-cals-1800-cals",
          "summary":"We\u2019ve packed antipasto favourites into these tasty pita pockets. Feel free to replace the eggplant dip with hummus or tzatziki.",
          "updated_at":"2014-12-05T07:51:00+11:00",
          "multi_serve_variation_id":6285,
          "categories":[  
             "Vegetarian",
             "Lunch"
          ],
          "image_url":{  
             "thumb":"/system/images/536/thumb/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "thumb_2x":"/system/images/536/thumb_2x/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "medium":"/system/images/536/medium/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "large_thumb":"/system/images/536/large_thumb/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "large":"/system/images/536/large/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "magazine":"/system/images/536/magazine/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg",
             "original":"/system/images/536/original/Antipasto_Pita_Pocketea63f8975e915913eb4e6336a3640276.jpg"
          },
          "ingredients_list":[  
             "2 pieces Wholemeal Pita Bread (80g)",
             "4 tablespoons Eggplant Dip (80g)",
             "140g Avocado",
             "10g Mixed Salad Leaves",
             "1  Carrot (61g), grated",
             "100g Chargrilled Capsicum, chopped",
             "80g Low Fat Feta, thinly sliced",
             "40g Canned Artichoke Hearts, Drained, thinly sliced"
          ],
          "traffic_light":"green",
          "permalink":"antipasto-pita-pocket-1500-cals-1700-cals-1800-cals",
          "country_code":"AU"
       }
    ]
thm76 commented 9 years ago

This takes about 2.8 seconds to decode on my Macbook Pro

tonyd256 commented 9 years ago

@thm76 can you post the code that you're using to decode that? If you have the test code with the measureBlock that would be great!

tonyd256 commented 9 years ago

@piercifani @thm76 #133 should fix this performance issue. If you both could switch to this branch and test again that would be awesome!

piercifani commented 9 years ago

This looks awesome: parsing time went from 3.721s to 0.324s!

tonyd256 commented 9 years ago

@piercifani that's great!! ... I just pushed one more change that I think will help you. Do you mind pulling the latest code and trying again?

piercifani commented 9 years ago

So, since I changed to a faster Mac since last night, I'm retrying both commits:

Commit df15db0 -> 0.201s Commit 2ce1047 -> 0.168s

Both with DEBUG configuration

...However... when compiled under RELEASE, latest commit is a screamer: 0.088s!!!💪

So yes, everything sounds great!

thm76 commented 9 years ago

Perfect, the time required to decode my JSON file went down to 0.068 seconds (from 2.8 seconds)!

Thanks a lot!

piercifani commented 9 years ago

Closing as this is merged and released as 1.0.3. Thanks a lot to all the persons involved!