```json
{
  "sym_variables": [
    ("x0", "kale salads"),
    ("x1", "chicken thighs"),
    ("x2", "knishes"),
    ("x3", "pickles"),
    ("x4", "cherry pies")
  ],
  "objective_function": "6*x0 + 7*x1 + 6*x2 + 1*x3 + 2*x4",
  "constraints": [
    "2*x0 + 4*x1 + 15*x2 + 12*x3 + 17*x4 <= 158",
    "9*x0 + 21*x1 + 23*x2 + 24*x3 + 6*x4 <= 207",
    "15*x0 + 4*x1 + 19*x2 + 28*x3 + 22*x4 <= 308",
    "2*x0 + 15*x2 >= 10",
    "15*x2 + 12*x3 >= 21",
    "2*x0 + 4*x1 >= 13",
    "4*x1 + 15*x2 >= 18",
    "15*x2 + 17*x4 >= 13",
    "12*x3 + 17*x4 >= 20",
    "2*x0 + 17*x4 >= 31",
    "2*x0 + 12*x3 >= 15",
    "4*x1 + 12*x3 >= 27",
    "23*x2 + 6*x4 >= 18",
    "9*x0 + 6*x4 >= 29",
    "21*x1 + 23*x2 >= 36",
    "23*x2 + 24*x3 >= 35",
    "21*x1 + 24*x3 + 6*x4 >= 28",
    "19*x2 + 28*x3 + 22*x4 >= 35",
    "15*x0 + 4*x1 + 19*x2 >= 35",
    "4*x1 + 28*x3 + 22*x4 >= 35",
    "4*x1 + 19*x2 + 28*x3 >= 35",
    "15*x0 + 19*x2 + 22*x4 >= 35",
    "19*x2 + 28*x3 + 22*x4 >= 36",
    "15*x0 + 4*x1 + 19*x2 >= 36",
    "15*x0 + 4*x1 + 28*x3 >= 36",
    "4*x1 + 28*x3 + 22*x4 >= 36",
    "4*x1 + 19*x2 + 28*x3 >= 36",
    "15*x0 + 19*x2 + 22*x4 >= 36",
    "19*x2 + 28*x3 + 22*x4 >= 34",
    "15*x0 + 4*x1 + 19*x2 >= 34",
    "15*x0 + 4*x1 + 28*x3 >= 34",
    "4*x1 + 28*x3 + 22*x4 >= 34",
    "4*x1 + 19*x2 + 28*x3 >= 34",
    "15*x0 + 19*x2 + 22*x4 >= 34",
    "19*x2 + 28*x3 + 22*x4 >= 60",
    "15*x0 + 4*x1 + 19*x2 >= 60",
    "15*x0 + 4*x1 + 28*x3 >= 60",
    "4*x1 + 28*x3 + 22*x4 >= 60",
    "4*x1 + 19*x2 + 28*x3 >= 60",
    "15*x0 + 19*x2 + 22*x4 >= 60",
    "19*x2 + 28*x3 + 22*x4 >= 45",
    "15*x0 + 4*x1 + 19*x2 >= 45",
    "15*x0 + 4*x1 + 28*x3 >= 45",
    "4*x1 + 28*x3 + 22*x4 >= 45",
    "4*x1 + 19*x2 + 28*x3 >= 45",
    "15*x0 + 19*x2 + 22*x4 >= 45",
    "19*x2 + 28*x3 + 22*x4 >= 55",
    "15*x0 + 4*x1 + 19*x2 >= 55",
    "15*x0 + 4*x1 + 28*x3 >= 55",
    "4*x1 + 28*x3 + 22*x4 >= 55",
    "4*x1 + 19*x2 + 28*x3 >= 55",
    "15*x0 + 19*x2 + 22*x4 >= 55",
    "4*x1 + 12*x3 <= 126",
    "2*x0 + 17*x4 <= 87",
    "2*x0 + 4*x1 + 17*x4 <= 68",
    "2*x0 + 4*x1 + 15*x2 + 12*x3 + 17*x4 <= 68",
    "21*x1 + 23*x2 <= 167",
    "9*x0 + 23*x2 <= 111",
    "24*x3 + 6*x4 <= 64",
    "9*x0 + 24*x3 <= 42",
    "21*x1 + 6*x4 <= 111",
    "21*x1 + 23*x2 + 6*x4 <= 98",
    "9*x0 + 23*x2 + 6*x4 <= 54",
    "9*x0 + 21*x1 + 24*x3 <= 109",
    "9*x0 + 21*x1 + 23*x2 <= 125",
    "9*x0 + 21*x1 + 23*x2 + 24*x3 + 6*x4 <= 125",
    "19*x2 + 22*x4 <= 185",
    "15*x0 + 22*x4 <= 283",
    "15*x0 + 28*x3 <= 161",
    "4*x1 + 28*x3 <= 179",
    "15*x0 + 4*x1 + 22*x4 <= 134",
    "4*x1 + 19*x2 + 22*x4 <= 280",
    "15*x0 + 4*x1 + 19*x2 + 28*x3 + 22*x4 <= 280",
    "x0 >= 0",
    "x1 >= 0",
    "x2 >= 0",
    "x3 >= 0",
    "x4 >= 0"
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("food_optimization")

# Create variables
kale_salads = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="kale_salads")
chicken_thighs = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="chicken_thighs")
knishes = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="knishes")
pickles = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="pickles")
cherry_pies = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="cherry_pies")


# Set objective function
m.setObjective(6*kale_salads + 7*chicken_thighs + 6*knishes + 1*pickles + 2*cherry_pies, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(2*kale_salads + 4*chicken_thighs + 15*knishes + 12*pickles + 17*cherry_pies <= 158, "protein_limit")
m.addConstr(9*kale_salads + 21*chicken_thighs + 23*knishes + 24*pickles + 6*cherry_pies <= 207, "iron_limit")
m.addConstr(15*kale_salads + 4*chicken_thighs + 19*knishes + 28*pickles + 22*cherry_pies <= 308, "calcium_limit")

# Add all other constraints from the JSON "constraints" list
constraints = [
    # ... (copy constraints from JSON)
]

for constraint_str in constraints:
    m.addConstr(eval(constraint_str))


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("The model is infeasible.")
else:
    print("Optimization ended with status %d" % m.status)

```