Content · Web Development · PHP

Validating JSON API Input

Validating JSON API Input explained through concise examples, edge cases, and practical PHP implementation guidance. Learn how to apply it with examples and common mistakes.

1 views Published Oct 17, 2026 Updated Oct 17, 2026 admin

Validating JSON API Input shows how to apply a focused PHP technique using understandable, runnable examples and clearly defined constraints.

What Problem Does This Solve?


Decode JSON with JSON_THROW_ON_ERROR, then validate the expected object shape, field types and size limits. Encode response values with JSON_THROW_ON_ERROR.

Core Concepts


  • Identify the data entering the operation and the expected output.
  • Decode JSON with JSON_THROW_ON_ERROR, then validate the expected object shape, field types and size limits. Encode response values with JSON_THROW_ON_ERROR.
  • Handle expected failures and test boundary conditions rather than assuming success.

Example 1: A Small Working Example


Start with a small input so the behavior is easy to follow.

<?php

$payload = json_decode("{\"quantity\":3}", true, 512, JSON_THROW_ON_ERROR);
if (!is_int($payload["quantity"] ?? null) || $payload["quantity"] < 1) { throw new InvalidArgumentException("Invalid quantity"); }
echo $payload["quantity"];

JSON_THROW_ON_ERROR reports malformed JSON through an exception. Validate the resulting PHP values and required fields after decoding.

Example 2: A Different Case


The second example changes the task or data while using the same general technique.

<?php

$payload = json_decode("{\"email\":\"[email protected]\"}", true, 512, JSON_THROW_ON_ERROR);
if (!filter_var($payload["email"] ?? null, FILTER_VALIDATE_EMAIL)) { throw new InvalidArgumentException("Invalid email"); }
echo "Valid email";

JSON_THROW_ON_ERROR reports malformed JSON through an exception. Validate the resulting PHP values and required fields after decoding.

Practical Example


This practical example is a complete standalone PHP snippet to adapt to a real application.

<?php

$requestBody = "{\"items\":[{\"sku\":\"BOOK-1\",\"qty\":2}]}";
$data = json_decode($requestBody, true, 512, JSON_THROW_ON_ERROR);
if (!is_array($data["items"] ?? null)) { throw new InvalidArgumentException("Expected items array"); }
foreach ($data["items"] as $line) { if (!is_string($line["sku"] ?? null) || !is_int($line["qty"] ?? null)) { throw new InvalidArgumentException("Invalid item"); } }
echo "Validated";

JSON_THROW_ON_ERROR reports malformed JSON through an exception. Validate the resulting PHP values and required fields after decoding.

Important Behavior and Edge Cases


  • JSON syntax validity does not prove the payload has the required fields or data types. Enforce body limits and validate the decoded structure.
  • Decode JSON with JSON_THROW_ON_ERROR, then validate the expected object shape, field types and size limits. Encode response values with JSON_THROW_ON_ERROR.
  • Test a malformed input, a missing dependency and a boundary value when those cases apply.

Comparison With Related Approaches


ApproachTrade-off
Validating JSON API InputDecode JSON with JSON_THROW_ON_ERROR, then validate the expected object shape, field types and size limits. Encode response values with JSON_THROW_ON_ERROR.
Related PHP approachJSON is suitable for interoperable data; PHP serialize() is not appropriate for untrusted interchange.

Common Beginner Mistakes


MistakeCorrect Approach
Skipping a relevant boundary or security checkJSON syntax validity does not prove the payload has the required fields or data types. Enforce body limits and validate the decoded structure.
Choosing a technique without considering its trade-offJSON is suitable for interoperable data; PHP serialize() is not appropriate for untrusted interchange.
Assuming sample data behaves like production inputTest missing fields, unexpected types, failures and the application’s actual trust boundaries.

Key Takeaways


  • Decode JSON with JSON_THROW_ON_ERROR, then validate the expected object shape, field types and size limits. Encode response values with JSON_THROW_ON_ERROR.
  • JSON is suitable for interoperable data; PHP serialize() is not appropriate for untrusted interchange.
  • Write tests around the inputs and failure cases most likely in your application.

Use these examples as a starting point and adapt the validations and boundaries to the specific application.

Share this resourceSend this page to someone who may find it useful.