To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables and formulating the objective function and constraints.

Let's define:
- $x_1$ as the number of microwaves sold,
- $x_2$ as the number of vents sold.

The objective is to maximize profit, given that the profit per microwave sold is $200 and the profit per vent sold is $300. Therefore, the objective function can be written as:
\[ \text{Maximize: } 200x_1 + 300x_2 \]

Now, let's formulate the constraints based on the problem description:
1. The store can spend at most $20,000. Given that a microwave costs $300 and a vent costs $400, we have:
\[ 300x_1 + 400x_2 \leq 20000 \]
2. The store sells at least 30 microwaves but at most 65 microwaves:
\[ 30 \leq x_1 \leq 65 \]
3. The number of vents sold is at most a third of the number of microwaves sold:
\[ x_2 \leq \frac{1}{3}x_1 \]

All variables $x_1$ and $x_2$ must be non-negative integers since they represent quantities of items.

The symbolic representation in JSON format is:

```json
{
  'sym_variables': [('x1', 'number of microwaves sold'), ('x2', 'number of vents sold')],
  'objective_function': '200*x1 + 300*x2',
  'constraints': [
    '300*x1 + 400*x2 <= 20000',
    '30 <= x1 <= 65',
    'x2 <= (1/3)*x1',
    'x1 >= 0', 
    'x2 >= 0'
  ]
}
```

Now, let's implement this optimization problem using Gurobi in Python:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.INTEGER, name="microwaves")
x2 = m.addVar(vtype=GRB.INTEGER, name="vents")

# Set objective function
m.setObjective(200*x1 + 300*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(300*x1 + 400*x2 <= 20000, "budget")
m.addConstr(x1 >= 30, "min_microwaves")
m.addConstr(x1 <= 65, "max_microwaves")
m.addConstr(x2 <= (1/3)*x1, "vent_limit")
m.addConstr(x1 >= 0, "non_negative_microwaves")
m.addConstr(x2 >= 0, "non_negative_vents")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of microwaves to sell: {x1.x}")
    print(f"Number of vents to sell: {x2.x}")
    print(f"Maximum profit: {m.objVal}")
else:
    print("No optimal solution found")
```