✎ Edit on GitHub

JSON

JSON is an integral part of Vapor. It powers Vapor's Config and is incredibly easy to use in both requests and responses.

Request

JSON is automatically available in request.data alongside form-urlencoded data and query data. This allows you to focus on making a great API, not worrying about what content types data will be sent in.

drop.get("hello") { request in
    guard let name = request.data["name"]?.string else {
        throw Abort.badRequest
    }
    return "Hello, \(name)!"
}

This will return a greeting for any HTTP method or content type that the name is sent as, including JSON.

JSON Only

To specifically target JSON, use the request.json property.

drop.post("json") { request in
    guard let name = request.json?["name"]?.string else {
        throw Abort.badRequest
    }

    return "Hello, \(name)!"
}

The above snippet will only work if the request is sent with JSON data.

Response

To respond with JSON, simply wrap your data structure with JSON(node: )

drop.get("version") { request in
    return try JSON(node: [
        "version": "1.0"
    ])
}

Middleware

The JSONMiddleware is included in the Droplet's middleware by default. You can remove it if you don't want JSON to be parsed.