To tackle this problem, we first need to define the symbolic representation as requested. The variables can be represented symbolically as follows:
- $x_1$ for 'chicken thighs',
- $x_2$ for 'apple pies',
- $x_3$ for 'knishes'.

The objective function to minimize is: $3x_1 + 2x_2 + 6x_3$.

The constraints, based on the description, are:
1. $6x_1 + 19x_2 \geq 57$ (at least 57 milligrams of calcium from chicken thighs and apple pies),
2. $6x_1 + 17x_3 \geq 59$ (at least 59 milligrams of calcium from chicken thighs and knishes),
3. $6x_1 + 19x_2 + 17x_3 \geq 59$ (at least 59 milligrams of calcium from all three),
4. $-10x_1 + x_2 \geq 0$ (minus ten times the number of chicken thighs plus the number of apple pies must be greater than or equal to zero).

The symbolic representation in JSON format is:
```json
{
    'sym_variables': [('x1', 'chicken thighs'), ('x2', 'apple pies'), ('x3', 'knishes')],
    'objective_function': '3*x1 + 2*x2 + 6*x3',
    'constraints': [
        '6*x1 + 19*x2 >= 57',
        '6*x1 + 17*x3 >= 59',
        '6*x1 + 19*x2 + 17*x3 >= 59',
        '-10*x1 + x2 >= 0'
    ]
}
```

Now, let's proceed to formulate this problem in Gurobi Python code. We will use the `gurobipy` library for this purpose.

```python
from gurobipy import *

# Create a model
m = Model("Optimization_Problem")

# Define variables - all are continuous
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="chicken_thighs")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="apple_pies")
x3 = m.addVar(vtype=GRB.CONTINUOUS, name="knishes")

# Set objective function
m.setObjective(3*x1 + 2*x2 + 6*x3, GRB.MINIMIZE)

# Add constraints
m.addConstr(6*x1 + 19*x2 >= 57, "calcium_from_chicken_and_pies")
m.addConstr(6*x1 + 17*x3 >= 59, "calcium_from_chicken_and_knishes")
m.addConstr(6*x1 + 19*x2 + 17*x3 >= 59, "total_calcium")
m.addConstr(-10*x1 + x2 >= 0, "chicken_pies_balance")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    for v in m.getVars():
        print(f"{v.varName}: {v.x}")
    print(f"Objective: {m.objVal}")
else:
    print("No optimal solution found")
```