To solve this optimization problem, we first need to convert the natural language description into a symbolic representation. Let's define the variables and the objective function, and then list out the constraints.

Let:
- $x_1$ be the number of standing desks produced.
- $x_2$ be the number of office chairs produced.

The objective is to minimize the total cost, which can be represented by the objective function: 
\[500x_1 + 230x_2\]

The constraints are as follows:
1. The machine must be operated for at least 2000 minutes per week.
   - Since each standing desk takes 60 minutes and each office chair takes 35 minutes, we have: 
     \[60x_1 + 35x_2 \geq 2000\]
2. The factory must make a minimum of 100 items total:
   - This translates to: 
     \[x_1 + x_2 \geq 100\]
3. Non-negativity constraints, since the number of items produced cannot be negative:
   - \(x_1 \geq 0\) and \(x_2 \geq 0\)

Now, let's represent this problem in the requested JSON format:

```json
{
    'sym_variables': [('x1', 'number of standing desks'), ('x2', 'number of office chairs')],
    'objective_function': '500*x1 + 230*x2',
    'constraints': [
        '60*x1 + 35*x2 >= 2000',
        'x1 + x2 >= 100',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

Given this symbolic representation, we can now write the Gurobi code in Python to solve the optimization problem:

```python
from gurobipy import *

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

# Define the variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="standing_desks")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="office_chairs")

# Set the objective function
m.setObjective(500*x1 + 230*x2, GRB.MINIMIZE)

# Add constraints
m.addConstr(60*x1 + 35*x2 >= 2000, "machine_time")
m.addConstr(x1 + x2 >= 100, "total_items")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Standing desks to produce: {x1.x}")
    print(f"Office chairs to produce: {x2.x}")
    print(f"Total cost: ${500*x1.x + 230*x2.x:.2f}")
else:
    print("No optimal solution found.")
```