To solve Jon's investment problem, we first need to convert the natural language description into a symbolic representation. Let's denote:

- $x_1$ as the amount invested in the milk industry,
- $x_2$ as the amount invested in the cheese industry.

The objective is to maximize earnings from these investments. The earnings can be calculated by considering the return on investment (ROI) for each industry: 8% for milk and 6% for cheese. Thus, the total earnings can be represented as $0.08x_1 + 0.06x_2$.

The constraints given are:
1. The total amount invested is $30,000: $x_1 + x_2 = 30000$.
2. The money invested in the milk industry must be at least three times as much as the money invested in the cheese industry: $x_1 \geq 3x_2$.
3. Jon can invest at most $25,000 in the milk industry: $x_1 \leq 25000$.

Also, we should note that investments cannot be negative, so $x_1 \geq 0$ and $x_2 \geq 0$.

Thus, the symbolic representation of the problem is:
```json
{
    'sym_variables': [('x1', 'amount invested in the milk industry'), ('x2', 'amount invested in the cheese industry')],
    'objective_function': '0.08*x1 + 0.06*x2',
    'constraints': ['x1 + x2 = 30000', 'x1 >= 3*x2', 'x1 <= 25000', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this problem using Gurobi in Python, we'll write the following code:
```python
from gurobipy import *

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

# Add variables
x1 = m.addVar(lb=0, name="amount_invested_milk")
x2 = m.addVar(lb=0, name="amount_invested_cheese")

# Set the objective function
m.setObjective(0.08*x1 + 0.06*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 + x2 == 30000, "total_investment")
m.addConstr(x1 >= 3*x2, "milk_at_least_three_times_cheese")
m.addConstr(x1 <= 25000, "max_milk_investment")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Amount invested in milk: {x1.x}")
    print(f"Amount invested in cheese: {x2.x}")
    print(f"Maximum earnings: {m.objVal}")
else:
    print("No optimal solution found")
```