✎ 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.