## Step 1: Define the symbolic representation of the problem

Let's define the symbolic variables:
- $x_1$ = number of bottles of black milk tea
- $x_2$ = number of bottles of green milk tea

The objective function is to maximize profit: $2.5x_1 + 7x_2$

The constraints are:
1. Milk constraint: $300x_1 + 200x_2 \leq 50000$
2. Black milk tea vs green milk tea constraint: $x_1 \geq 3x_2$
3. Minimum green milk tea constraint: $x_2 \geq 10$
4. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

## Step 2: Convert the problem into a Gurobi code

We will use the Gurobi library in Python to solve this linear programming problem.

## Step 3: Write down the Gurobi code

```python
import gurobi as gp

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

# Define the variables
x1 = model.addVar(name="black_milk_tea", obj=2.5, lb=0, vtype=gp.GRB.INTEGER)
x2 = model.addVar(name="green_milk_tea", obj=7, lb=0, vtype=gp.GRB.INTEGER)

# Add constraints
model.addConstr(300 * x1 + 200 * x2 <= 50000, name="milk_constraint")
model.addConstr(x1 >= 3 * x2, name="black_vs_green_constraint")
model.addConstr(x2 >= 10, name="min_green_constraint")

# Set the model to maximize the objective function
model.setObjective(x1.obj * x1 + x2.obj * x2, gp.GRB.MAXIMIZE)

# Optimize the model
model.optimize()

# Print the solution
if model.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of black milk tea bottles: {x1.varValue}")
    print(f"Number of green milk tea bottles: {x2.varValue}")
    print(f"Maximum profit: {model.objVal}")
else:
    print("No optimal solution found.")
```

## Step 4: Provide the symbolic representation in JSON format

```json
{
    'sym_variables': [('x1', 'number of bottles of black milk tea'), ('x2', 'number of bottles of green milk tea')],
    'objective_function': '2.5x1 + 7x2',
    'constraints': [
        '300x1 + 200x2 <= 50000',
        'x1 >= 3x2',
        'x2 >= 10',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```