== JSON

Unlike some other languages, Java does not have first class support for http://json.org/[JSON] so we provide
two classes to make handling JSON in your Vert.x applications a bit easier.

Use the `link:../../apidocs/io/vertx/core/json/JsonObject.html[JsonObject]` class to represent JSON objects and the `link:../../apidocs/io/vertx/core/json/JsonArray.html[JsonArray]`
class to represent JSON arrays, you can refer to the Java documentation for more details.

=== Builders

Builders are provided to provide a more fluent JSON construction:

[source, kotlin]
----
// The json builder declares a JSON structure
val result = json {

  // in this structure the obj function can be used

  // takes a vararg of Kotlin pairs
  obj(
    "key_1" to 1,
    "key_2" to 2,
    "key_3" to 3
  )

  // or an iterable of Kotlin pairs
  obj((1..3).map { "key_$it" to it })

  // or a Map<String, Any?>
  obj(someMap)

  // apply function on object receiver
  obj {
    for (i in 1..3) {
      put("key_$i", i)
    }
  }
}
----

You can also build JSON arrays:

[source, kotlin]
----
// The json builder declares a JSON structure
val result = json {

  // in this structure the array function can be used

  // takes a vararg of values
  array("1", "2", "3")

  // or an iterable of values
  array((1..3).map { "$it" })

  // apply function on array receiver
  array {
    for (i in 1..3) {
      add("$i")
    }
  }
}
----

Of course it is possible to mix objects and arrays

[source, kotlin]
----
// The json builder declares a JSON structure
val result = json {
  "firstName" to "Dale",
  "lastName" to "Cooper",
  "age" to 64,
  "names" to array("Dale", "Bartholomew")
}
----

=== Postscript operator overloading

The Kotlin postscript operator is overloaded for JSON object and array:

[source, kotlin]
----
print(someObject["firstName"]);
print(someArray[4]);
----