To solve this optimization problem, we first need to translate the given description into a symbolic representation. Let's denote:
- 'x1' as the quantity of grams of fiber,
- 'x2' as the quantity of milligrams of potassium,
- 'x3' as the quantity of milligrams of magnesium.

The objective function described is: minimize 7*x1 + 8*x2 + x3.

Now, let's list out the constraints based on the description:
1. The total combined digestive support index from milligrams of potassium plus milligrams of magnesium has to be greater than or equal to 24: 4*x2 + 15*x3 >= 24.
2. The total combined digestive support index from grams of fiber and milligrams of magnesium should be greater than or equal to 25: 8*x1 + 15*x3 >= 25.
3. The total combined digestive support index from grams of fiber plus milligrams of potassium should be 14 or more: 8*x1 + 4*x2 >= 14.
4. The total combined digestive support index from grams of fiber plus milligrams of potassium plus milligrams of magnesium must be no less than 14: 8*x1 + 4*x2 + 15*x3 >= 14.
5. -3 times the number of milligrams of potassium, plus two times the number of milligrams of magnesium must be greater than or equal to zero: -3*x2 + 2*x3 >= 0.
6. Minus nine times the number of grams of fiber, plus 6 times the number of milligrams of potassium has to be no less than zero: -9*x1 + 6*x2 >= 0.

Given that all variables can be non-integer (as indicated by the ability to use fractional amounts), we treat x1, x2, and x3 as continuous variables.

The symbolic representation in JSON format is:
```json
{
    'sym_variables': [('x1', 'grams of fiber'), ('x2', 'milligrams of potassium'), ('x3', 'milligrams of magnesium')],
    'objective_function': 'minimize 7*x1 + 8*x2 + x3',
    'constraints': [
        '4*x2 + 15*x3 >= 24',
        '8*x1 + 15*x3 >= 25',
        '8*x1 + 4*x2 >= 14',
        '8*x1 + 4*x2 + 15*x3 >= 14',
        '-3*x2 + 2*x3 >= 0',
        '-9*x1 + 6*x2 >= 0'
    ]
}
```

Here's the Gurobi code to solve this optimization problem:
```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="grams_of_fiber")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="milligrams_of_potassium")
x3 = m.addVar(vtype=GRB.CONTINUOUS, name="milligrams_of_magnesium")

# Define the objective function
m.setObjective(7*x1 + 8*x2 + x3, GRB.MINIMIZE)

# Add constraints
m.addConstr(4*x2 + 15*x3 >= 24, "digestive_support_index_1")
m.addConstr(8*x1 + 15*x3 >= 25, "digestive_support_index_2")
m.addConstr(8*x1 + 4*x2 >= 14, "digestive_support_index_3")
m.addConstr(8*x1 + 4*x2 + 15*x3 >= 14, "total_digestive_support_index")
m.addConstr(-3*x2 + 2*x3 >= 0, "potassium_magnesium_ratio")
m.addConstr(-9*x1 + 6*x2 >= 0, "fiber_potassium_ratio")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Grams of Fiber: {x1.x}")
    print(f"Milligrams of Potassium: {x2.x}")
    print(f"Milligrams of Magnesium: {x3.x}")
else:
    print("No optimal solution found")
```