To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of crabs and lobsters to be cleaned and shelled, formulating the objective function based on profit, and establishing constraints based on the available time for cleaning and shelling.

### Symbolic Representation

Let's define:
- \(x_1\) as the number of crabs,
- \(x_2\) as the number of lobsters.

The objective function aims to maximize profit. Given that each crab brings a profit of $14 and each lobster brings a profit of $18, we can express the objective function as:
\[ \text{Maximize: } 14x_1 + 18x_2 \]

Constraints are based on the available time for cleaning and shelling:
- Cleaning time constraint: \(4x_1 + 5x_2 \leq 400\)
- Shelling time constraint: \(15x_1 + 12x_2 \leq 900\)

Additionally, since we cannot have negative quantities of crabs or lobsters, we have non-negativity constraints:
- \(x_1 \geq 0\)
- \(x_2 \geq 0\)

### Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'number of crabs'), ('x2', 'number of lobsters')],
    'objective_function': '14*x1 + 18*x2',
    'constraints': ['4*x1 + 5*x2 <= 400', '15*x1 + 12*x2 <= 900', 'x1 >= 0', 'x2 >= 0']
}
```

### Gurobi Code in Python

To solve this linear programming problem using Gurobi in Python, we can use the following code:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="crabs", lb=0)
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="lobsters", lb=0)

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

# Add constraints
m.addConstr(4*x1 + 5*x2 <= 400, "cleaning_time")
m.addConstr(15*x1 + 12*x2 <= 900, "shelling_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of crabs: {x1.x}")
    print(f"Number of lobsters: {x2.x}")
    print(f"Maximum profit: ${14*x1.x + 18*x2.x:.2f}")
else:
    print("No optimal solution found")
```