influxdata/influxdb · error · Error

serde json error

Error message

serde json error: {0}

What it means

Wraps serde_json::Error as 'serde json error: {0}'. It occurs when the HTTP layer fails to parse or serialize JSON — typically an invalid JSON body on endpoints expecting JSON, or an internal JSON serialization failure.

Solutions

  1. Validate the JSON body with a linter (jq) before sending
  2. Send the body to the endpoint that matches its format (line protocol to /write, JSON to the JSON query endpoint)
  3. Check that the Content-Type header matches the body encoding
  4. If it happens on server responses, inspect the wrapped serde message and file a bug

Example fix

// before
{"query": "SELECT * FROM cpu",}  # trailing comma
// after
{"query": "SELECT * FROM cpu"}
Defensive patterns

Strategy: validation

Validate before calling

try { JSON.stringify(JSON.parse(body)); } catch (e) {
  throw new Error("request body is not valid JSON: " + e.message);
}

Type guard

function isJsonObject(v) { return typeof v === "object" && v !== null && !Array.isArray(v); }

Try / catch

try { await postJson(url, body); } catch (e) {
  if (String(e).includes("serde json error")) {
    // validate body with JSON.parse locally, fix syntax, resend
  }
}

Prevention

When it happens

Trigger: POSTing an invalid/malformed JSON body to a JSON endpoint (e.g. /api/v3/query_json, line-protocol-as-json writes); internal response serialization bug.

Common situations: Trailing commas, single quotes, or unquoted keys in request JSON; sending line protocol as the body of a JSON endpoint; wrong Content-Type causing JSON parse of a non-JSON body.

Understand the failure class

Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/a68b8a9712b7b46a. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_server/src/http.rs:307

    /// Hyper error
    #[error("hyper http error: {0}")]
    Hyper(#[from] hyper::http::Error),

    /// WriteBuffer error
    #[error("write buffer error: {0}")]
    WriteBuffer(#[from] influxdb3_write::write_buffer::Error),

    /// Persister error
    #[error("persister error: {0}")]
    Persister(#[from] influxdb3_write::persister::PersisterError),

    // ToStrError
    #[error("to str error: {0}")]
    ToStr(#[from] hyper::header::ToStrError),

    // SerdeJsonError
    #[error("serde json error: {0}")]
    SerdeJson(#[from] serde_json::Error),

    // Influxdb3 Write
    #[error("serde json error: {0}")]
    Influxdb3Write(#[from] influxdb3_write::Error),

    #[error("datafusion error: {0}")]
    Datafusion(#[from] DataFusionError),

    #[error("io error: {0}")]
    Io(#[from] std::io::Error),

    #[error("query error: {0}")]
    Query(#[from] QueryExecutorError),

    #[error(transparent)]
    DbName(#[from] ValidateDbNameError),

View on GitHub (pinned to 06200ef96b)