You have a nested JSON file and no idea what's in it.

Treivu reads a sample and tells you — every field, how often it's really there, and which rules actually hold. Then it writes them out as dbt, Soda, Great Expectations, or JSON Schema.

Here's what it produces

A nested order payload — orders_sample.json, 2,000 records

19 checks proposed10 leaves, 4 inside arraysEvery row is evidence you can check
  • order.id
    • 1.00
      not_null

      present in 100% of 2000 records

    • 0.85
      unique

      2000 distinct values across 2000 present records — unique in this sample, which is not proof it is unique in the source

  • order.status
    • 1.00
      not_null

      present in 100% of 2000 records

    • 0.95
      allowed_values

      only 4 distinct values across 2000 present records

  • order.total_cents
    • 1.00
      not_null

      present in 100% of 2000 records

    • 0.85
      range

      observed numeric range 499–48900 across 2000 present records

    • 0.90
      type_should_be

      all 2000 present values are number

  • order.customer.email
    • 1.00
      not_null

      present in 100% of 2000 records

    • 0.95
      matches_regex

      100% of 1996 present records match email format

  • order.created_at
    • 1.00
      not_null

      present in 100% of 2000 records

    • 0.95
      matches_regex

      100% of 2000 present records match iso_datetime format

  • order.line_items[]
    • 0.95
      array_non_empty

      array populated in 100% of 2000 records (min length 1, max 14)

  • order.line_items[].sku
    • 1.00
      not_null

      present in 100% of 5400 array elements

  • order.line_items[].quantity
    • 1.00
      not_null

      present in 100% of 5400 array elements

    • 0.85
      range

      observed numeric range 1–12 across 5400 present array elements

    • 0.90
      type_should_be

      all 5400 present values are number

  • order.line_items[].price_cents
    • 1.00
      not_null

      present in 99% of 5400 array elements

    • 0.85
      range

      observed numeric range 199–12900 across 5346 present array elements

    • 0.96
      type_should_be

      96% of values are number; 4% are other types

Nothing proposed for order.discount_code. It's present in only 23% of records — not enough evidence for a rule that would hold. A check you'd have to delete is worse than no check.

Your file never leaves your browser. Only the profiling engine is downloaded.

Now try your own file

Compare with an existing suite

Compare with a baseline profile

Or try a sample

or try a sample