ToolDeck

JSONPath Tester

Testa JSONPath-uttryck mot JSON-data och se matchande resultat

Prova ett exempel

JSON-indata

Resultat

Körs lokalt · Säkert att klistra in hemligheter
Resultat visas här…

Vad är JSONPath?

JSONPath är ett frågespråk för att extrahera värden från JSON-dokument. Det föreslogs ursprungligen av Stefan Goessner 2007 som en analog till XPath för XML, och låter dig skriva uttryck som $.store.book[*].author för att välja alla author-fält inuti en book-array utan att skriva loopar eller manuell traverseringskod. Språket standardiserades i februari 2024 som RFC 9535, publicerad av IETF.

Ett JSONPath-uttryck börjar alltid med $ som representerar roten av dokumentet. Därifrån kedjar du ihop selektorer: punktnotation för objektnycklar, hakparentesnotation för arrayindex, jokertecken för alla barn och den rekursiva nedstegningsoperatorn (..) för att söka igenom varje nivå av nästling. Filteruttryck som [?(@.price < 10)] låter dig välja element baserat på villkor utvärderade mot deras värden.

JSONPath används i API-testverktyg som Postman, observabilitetsplattformar som Datadog och Splunk, arbetsflödesmotorer som Apache NiFi, samt programmeringsbibliotek i JavaScript, Python, Go, Java och C#. Att testa dina uttryck mot verklig data innan du bäddar in dem i kod eller konfigurationsfiler förebygger tysta fel när JSON-strukturen inte matchar dina antaganden.

Varför använda denna JSONPath Tester?

Att skriva JSONPath-uttryck för hand är felbenäget. En saknad punkt, fel typ av parentes eller felaktig filtersyntax kan ge tomma resultat utan något felmeddelande. Det här verktyget ger dig omedelbar visuell återkoppling om vad ditt uttryck matchar.

Omedelbara resultat
Klistra in JSON, skriv ett uttryck och se matchande värden uppdateras i realtid. Inget behov av att köra ett skript eller ladda om en sida för att kontrollera din fråga.
🔒
Integritetsfokuserad
All utvärdering sker i din webbläsare. Din JSON-data lämnar aldrig din dator, så du kan tryggt testa uttryck mot produktions-API-svar eller konfigurationsfiler som innehåller autentiseringsuppgifter.
📋
Kopiera resultat direkt
Kopiera matchad utdata som JSON med ett klick. Klistra in den i testpåståenden, dokumentation eller API-svarsexempel utan omformatering.
🛠️
Ingen installation krävs
Inga npm-paket att installera, inga Python-virtualenvs att skapa. Öppna sidan, klistra in din data och börja fråga. Fungerar på alla enheter med en webbläsare.

JSONPath-användningsfall

Frontend-utveckling
Extrahera exakt de nästlade värden du behöver från API-svar innan du kopplar dem till React-tillstånd eller Vue-beräknade egenskaper. Testa dina sökvägsuttryck mot det faktiska API-svaret först.
Backend API-testning
Postman och REST-assured använder JSONPath för att kontrollera svarskroppar. Bygg och verifiera dina påståendeuttryck här innan du kopierar dem till testskript, vilket minskar felsökningscykler.
DevOps-konfiguration
Kubernetes custom resource definitions, AWS Step Functions och Terraform-datakällor accepterar JSONPath-uttryck för att extrahera värden från JSON-utdata. Validera din sökväg innan du driftsätter.
QA-testautomation
Skriv JSONPath-baserade påståenden för kontraktstester och integrationstester. Verifiera att dina uttryck korrekt matchar förväntade värden när JSON-strukturen har valfria eller nullbara fält.
Dataflödesextraktion
Apache NiFi, Logstash och anpassade ETL-skript använder JSONPath för att extrahera fält från semi-strukturerad loggdata och händelseströmmar. Testa uttryck mot exempeldata innan pipeline-driftsättning.
Inlärning och experimentering
Studenter och utvecklare som är nya på JSONPath kan prova olika uttryck mot exempel-JSON för att förstå hur jokertecken, rekursiv nedstegning och filter fungerar utan en lokal miljö.

JSONPath-syntaxreferens

RFC 9535 definierar standard-JSONPath-syntaxen. Tabellen nedan täcker de operatorer du kommer att använda i de flesta frågor. Alla uttryck börjar med $ (rotnoden) och kedjar en eller flera selektorer för att navigera dokumentstrukturen.

OperatorBeskrivningExempel
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs jq vs XPath

JSONPath, jq och XPath löser samma problem (frågor mot strukturerad data) för olika format och användningsfall. JSONPath riktar sig mot JSON och är tillgängligt som ett bibliotek i de flesta språk. jq är ett fristående CLI-verktyg med sitt eget Turing-komplett filterspråk. XPath opererar på XML och är en del av W3C:s specifikationsstack.

FunktionJSONPathjqXPath
DataformatJSONJSONXML
Åtkomst till första elementet$.store.book[0].store.book[0]/store/book[1]
Rekursiv sökning$..price.. | .price?//price
Filteruttryck[?(@.price<10)]select(.price < 10)[price<10]
SpecifikationRFC 9535stedolan.github.ioW3C XPath 3.1

Kodexempel

Hur man utvärderar JSONPath-uttryck i populära språk och verktyg. Varje exempel använder samma JSON-struktur för en bokhandel för jämförelse.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Vanliga frågor

Vad är skillnaden mellan JSONPath och jq?
JSONPath är ett frågespråk utformat för att bäddas in i applikationer som ett bibliotek. Det returnerar matchande värden från ett JSON-dokument med sökvägsuttryck. jq är ett fristående kommandoradsverktyg med ett fullständigt programmeringsspråk för att transformera JSON, inklusive villkor, funktioner och stränginterpolation. Använd JSONPath när du behöver en fråga inbäddad i kod eller ett verktyg som Postman. Använd jq för ad hoc-datatransformation på kommandoraden.
Är JSONPath en officiell standard?
Ja. IETF publicerade RFC 9535 ("JSONPath: Query Expressions for JSON") i februari 2024. Innan dess existerade JSONPath bara som en informell specifikation av Stefan Goessner från 2007, vilket ledde till inkonsekvenser mellan implementationer. RFC 9535 definierar syntaxen, semantiken och ett normaliseringsformat för interoperabilitet.
Hur fungerar rekursiv nedstegning (..) i JSONPath?
Den rekursiva nedstegningsoperatorn (..) söker igenom varje nivå av JSON-dokumentet efter nyckeln som följer den. Till exempel returnerar $..price alla värden associerade med nyckeln "price" oavsett hur djupt de är nästlade. Det är ekvivalent med en djup-först-traversering som samlar matchande noder. Observera att rekursiv nedstegning på stora dokument kan returnera många resultat och kan vara långsammare än en direkt sökväg.
Kan JSONPath ändra JSON-data?
Nej. JSONPath är ett skrivskyddat frågespråk. Det väljer och returnerar värden men kan inte infoga, uppdatera eller ta bort noder. För att ändra JSON baserat på ett JSONPath-uttryck behöver du använda ditt programmeringsspråks JSON-manipuleringsfunktioner efter att ha frågat. Vissa bibliotek som jsonpath-ng i Python tillhandahåller en set()-metod på matchningsobjekt, men detta är ett bibliotekstillägg, inte en del av JSONPath-specifikationen.
Vad betyder @-symbolen i JSONPath-filteruttryck?
@-symbolen refererar till den aktuella noden som utvärderas i ett filteruttryck. I $.store.book[?(@.price < 10)] itererar filtret över varje element i book-arrayen, och @ representerar varje bokobjekt i tur och ordning. @.price ger åtkomst till price-fältet för den aktuella boken. Utan @ skulle filtret inte veta vilken nods egenskaper som ska kontrolleras.
Hur hanterar jag nycklar med specialtecken eller mellanslag i JSONPath?
Använd hakparentesnotation med citattecken: $['store']['book title']. Hakparentesnotation fungerar för alla nycklar, inklusive de med punkter, mellanslag eller Unicode-tecken. Punktnotation ($.store.key) fungerar bara för nycklar som är giltiga identifierare (bokstäver, siffror, understreck). RFC 9535 kräver att implementationer stöder både enkelt- och dubbelciterad hakparentesnotation.
Varför returnerar mitt JSONPath-uttryck tomma resultat?
De vanligaste orsakerna är: ett stavfel i ett nyckelnamn (JSONPath är skiftlägeskänsligt), användning av punktnotation för en nyckel som innehåller specialtecken, att $-rotsymbolen saknas i början, eller att man antar att ett värde är en array när det är ett enskilt objekt. Klistra in din JSON i ett testverktyg och prova enklare deluttryck först (som $.store) för att verifiera att varje segment av din sökväg löser sig korrekt innan du lägger till fler selektorer.