Använda JSONPath för att transformera JSON-data i arbetsböcker
Arbetsböcker kan köra frågor mot data från många källor. Vissa slutpunkter, till exempel Azure Resource Manager eller anpassade slutpunkter, kan returnera resultat i JSON. Om JSON-data som returneras av den efterfrågade slutpunkten är i ett format som du inte vill använda kan du använda JSONPath-transformering för att konvertera JSON till en tabellstruktur. Du kan sedan använda tabellen för att rita arbetsboksvisualiseringar.
JSONPath är ett frågespråk för JSON som liknar XPath för XML. Precis som XPath tillåter JSONPath extrahering och filtrering av data från JSON-strukturen.
Använda JSONPath
I det här exemplet representerar JSON-objektet ett lagers lager. Vi ska skapa en tabell med butikens tillgängliga böcker som visar deras titlar, författare och priser.
Växla arbetsboken till redigeringsläge genom att välja Redigera.
Använd länken Lägg till>fråga för att lägga till en frågekontroll i arbetsboken.
Välj datakällan som JSON.
Använd JSON-redigeraren för att ange följande JSON-kodfragment:
{ "store": { "books": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }
Välj fliken Resultatinställningar och växla resultatformatet till JSON-sökväg.
Använd följande JSON-sökvägsinställningar:
JSON-sökvägstabell:
$.store.books
. Det här fältet representerar sökvägen till tabellens rot. I det här fallet bryr vi oss om butikens bokinventering. Tabellsökvägen filtrerar JSON till bokinformationen.Kolumn-ID:t JSON-kolumnsökvägar Title $.title
Författare $.author
Pris $.price
Kolumn-ID:t är kolumnrubrikerna. Kolumn-JSON-sökvägar representerar sökvägen från tabellens rot till kolumnvärdet.
Välj Kör fråga.
Använda reguljära uttryck för att konvertera värden
Du kan ha vissa data som inte är i standardformat. Om du vill använda dessa data effektivt vill du konvertera dessa data till ett standardformat.
I det här exemplet är det publicerade datumet i YYYMMMDD-format. Koden tolkar det här värdet som ett numeriskt värde, inte text, vilket resulterar i rätt motiverade tal i stället för som ett datum.
Du kan använda fälten Typ, RegEx Match och Ersätt med i resultatinställningarna för att konvertera resultatet till sanna datum.
Resultatinställningsfält | beskrivning |
---|---|
Typ | Gör att du uttryckligen kan ändra typen av det värde som returneras av API:et. Det här fältet lämnade vi vanligtvis oet, men du kan använda det här fältet för att tvinga värdet till en annan typ. |
Regex-matchning | Gör att du kan ange ett reguljärt uttryck för att delta (eller delar) av det värde som returneras av API:et i stället för hela värdet. Det här fältet kombineras vanligtvis med fältet Ersätt med . |
Ersätt med | Använd det här fältet för att skapa det nya värdet tillsammans med det reguljära uttrycket. Om det här värdet är tomt är $& standardvärdet , vilket är matchningsresultatet för uttrycket. Se string.replace-dokumentationen om du vill se andra värden som du kan använda för att generera andra utdata. |
Så här konverterar du YYYMMDD-format till YYYY-MM-DD-format:
Välj raden Publicerad i rutnätet.
I fältet Typ väljer du Datum/tid så att kolumnen kan användas i diagram.
I fältet Regex Match använder du det här reguljära uttrycket:
([0-9]{4})([0-9]{2})([0-9]{2})
. Det här reguljära uttrycket:- matchar ett fyrsiffrigt tal, sedan ett tvåsiffrigt tal och sedan ytterligare ett tvåsiffrigt tal.
- Parenteserna bildar insamlingsgrupper som ska användas i nästa steg.
I ersätt med använder du det här reguljära uttrycket:
$1-$2-$3
. Det här uttrycket skapar en ny sträng med varje infångad grupp, med ett bindestreck mellan dem, vilket gör "12345678" till "1234-56-78").Kör frågan igen.