```json
{
  "sym_variables": [
    ("x0", "hours worked by Bill"),
    ("x1", "hours worked by Mary"),
    ("x2", "hours worked by Jean"),
    ("x3", "hours worked by Bobby"),
    ("x4", "hours worked by Peggy"),
    ("x5", "hours worked by John"),
    ("x6", "hours worked by Laura")
  ],
  "objective_function": "9.14 * x0 + 5.59 * x1 + 5.6 * x2 + 5.74 * x3 + 7.63 * x4 + 4.24 * x5 + 8.77 * x6",
  "constraints": [
    "6 * x3 + 2 * x4 >= 12",
    "4 * x2 + 4 * x5 >= 17",
    "6 * x0 + 4 * x5 >= 7",
    "7 * x1 + 4 * x2 >= 15",
    "6 * x0 + 4 * x2 >= 11",
    "4 * x2 + 2 * x4 >= 16",
    "7 * x1 + 13 * x3 >= 12",
    "4 * x2 + 13 * x3 >= 11",
    "2 * x4 + 9 * x6 >= 5",
    "7 * x1 + 9 * x6 >= 6",
    "7 * x1 + 4 * x2 + 4 * x5 >= 11",
    "4 * x2 + 2 * x4 + 4 * x5 >= 11",
    "6 * x0 + 13 * x3 + 2 * x4 >= 11",
    "6 * x0 + 13 * x3 + 9 * x6 >= 11",
    "7 * x1 + 13 * x3 + 9 * x6 >= 11",
    "13 * x3 + 2 * x4 + 9 * x6 >= 11",
    "6 * x0 + 4 * x5 + 9 * x6 >= 11",
    "13 * x3 + 4 * x5 + 9 * x6 >= 11",
    "6 * x0 + 7 * x1 + 4 * x2 >= 11",
    "6 * x0 + 7 * x1 + 2 * x4 >= 11",
    "4 * x2 + 13 * x3 + 4 * x5 >= 11",
    "7 * x1 + 2 * x4 + 9 * x6 >= 11",
    "6 * x0 + 13 * x3 + 4 * x5 >= 11",
    "6 * x0 + 4 * x2 + 9 * x6 >= 11",
    "6 * x0 + 7 * x1 + 4 * x5 >= 11",
    "13 * x3 + 2 * x4 + 4 * x5 >= 11",
    "4 * x2 + 4 * x5 + 9 * x6 >= 11",
    "7 * x1 + 13 * x3 + 4 * x5 >= 11",
    "6 * x0 + 4 * x2 + 4 * x5 >= 11",
    "6 * x0 + 4 * x2 + 2 * x4 >= 11",
    "7 * x1 + 4 * x2 + 2 * x4 >= 11",
    "4 * x2 + 9 * x6 <= 25",
    "4 * x2 + 4 * x5 <= 43",
    "13 * x3 + 2 * x4 <= 95",
    "6 * x0 + 2 * x4 <= 23",
    "6 * x0 + 4 * x5 <= 107",
    "6 * x0 + 4 * x2 <= 44",
    "2 * x4 + 4 * x5 <= 30",
    "7 * x1 + 13 * x3 <= 70",
    "6 * x0 + 13 * x3 <= 54",
    "4 * x2 + 13 * x3 <= 33",
    "13 * x3 + 9 * x6 <= 79",
    "4 * x2 + 2 * x4 <= 20",
    "7 * x1 + 9 * x6 <= 108",
    "2 * x4 + 9 * x6 <= 105",
    "7 * x1 + 2 * x4 <= 95",
    "7 * x1 + 4 * x2 <= 41",
    "6 * x0 + 4 * x5 + 9 * x6 <= 117",
    "6 * x0 + 7 * x1 + 4 * x2 + 13 * x3 + 2 * x4 + 4 * x5 + 9 * x6 <= 124" 
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
bill = m.addVar(vtype=gp.GRB.INTEGER, name="bill")
mary = m.addVar(vtype=gp.GRB.CONTINUOUS, name="mary")
jean = m.addVar(vtype=gp.GRB.CONTINUOUS, name="jean")
bobby = m.addVar(vtype=gp.GRB.CONTINUOUS, name="bobby")
peggy = m.addVar(vtype=gp.GRB.CONTINUOUS, name="peggy")
john = m.addVar(vtype=gp.GRB.CONTINUOUS, name="john")
laura = m.addVar(vtype=gp.GRB.CONTINUOUS, name="laura")

# Set objective function
m.setObjective(9.14 * bill + 5.59 * mary + 5.6 * jean + 5.74 * bobby + 7.63 * peggy + 4.24 * john + 8.77 * laura, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(6 * bobby + 2 * peggy >= 12)
m.addConstr(4 * jean + 4 * john >= 17)
m.addConstr(6 * bill + 4 * john >= 7)
m.addConstr(7 * mary + 4 * jean >= 15)
m.addConstr(6 * bill + 4 * jean >= 11)
m.addConstr(4 * jean + 2 * peggy >= 16)
m.addConstr(7 * mary + 13 * bobby >= 12)
m.addConstr(4 * jean + 13 * bobby >= 11)
m.addConstr(2 * peggy + 9 * laura >= 5)
m.addConstr(7 * mary + 9 * laura >= 6)

# ... (Add remaining constraints from JSON "constraints" field)

m.addConstr(4 * jean + 9 * laura <= 25)
m.addConstr(4 * jean + 4 * john <= 43)
m.addConstr(13 * bobby + 2 * peggy <= 95)
m.addConstr(6 * bill + 2 * peggy <= 23)
m.addConstr(6 * bill + 4 * john <= 107)
m.addConstr(6 * bill + 4 * jean <= 44)
m.addConstr(2 * peggy + 4 * john <= 30)
m.addConstr(7 * mary + 13 * bobby <= 70)
m.addConstr(6 * bill + 13 * bobby <= 54)
m.addConstr(4 * jean + 13 * bobby <= 33)
m.addConstr(13 * bobby + 9 * laura <= 79)
m.addConstr(4 * jean + 2 * peggy <= 20)
m.addConstr(7 * mary + 9 * laura <= 108)
m.addConstr(2 * peggy + 9 * laura <= 105)
m.addConstr(7 * mary + 2 * peggy <= 95)
m.addConstr(7 * mary + 4 * jean <= 41)
m.addConstr(6 * bill + 4 * john + 9 * laura <= 117)
m.addConstr(6 * bill + 7 * mary + 4 * jean + 13 * bobby + 2 * peggy + 4 * john + 9 * laura <= 124)


# Optimize model
m.optimize()

# Print results
if m.status == gp.GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible")
else:
    print("Optimization ended with status %d" % m.status)
```