macro_rules! json {
($($t:tt)*) => { ... };
}
Available on crate feature
erased-json
only.Expand description
Construct an ErasedJson
response from a JSON literal.
A Content-Type: application/json
header is automatically added.
Any variable or expression implementing Serialize
can be interpolated as a value in the literal.
If the Serialize
implementation fails,
or if a map with non-string keys is used,
a 500 response will be issued
whose body is the error message in UTF-8.
Internally,
this function uses the typed_json::json!
macro,
allowing it to perform far fewer allocations
than a dynamic macro like serde_json::json!
would –
it’s equivalent to if you had just written
derive(Serialize)
on a struct.
§Examples
use axum::{
Router,
extract::Path,
response::Response,
routing::get,
};
use axum_extra::response::ErasedJson;
async fn get_user(Path(user_id) : Path<u64>) -> ErasedJson {
let user_name = find_user_name(user_id).await;
axum_extra::json!({ "name": user_name })
}
async fn find_user_name(user_id: u64) -> String {
// ...
}
let app = Router::new().route("/users/{id}", get(get_user));
Trailing commas are allowed in both arrays and objects.
let response = axum_extra::json!(["trailing",]);