Mapowania JSONPath dla łącznika REST API ogólnego zastosowania
Dowiedz się, jak efektywnie używać mapowań JsonPath, aby usprawnić wyodrębnianie danych w ogólnym łączniku REST API w celu zapewnienia lepszej integracji.
Mapowania JSONPath dla łącznika REST API ogólnego zastosowania
Dowiedz się, jak efektywnie używać mapowań JsonPath, aby usprawnić wyodrębnianie danych w ogólnym łączniku REST API w celu zapewnienia lepszej integracji.
Ogólny łącznik REST API umożliwia konfigurację mapowań atrybutów przy użyciu języka JSONPath.
Poniższa tabela przedstawia obsługiwane i nieobsługiwane składnie JSONPath. Ze względu na tak wiele możliwych wyrażeń JSONPath, ta tabela nie zawiera wszystkich. Dlatego prawdopodobnie zadziałają również te spoza obsługiwanych.
Główną nieobsługiwaną rzeczą jest to, że jeśli JSONPath zwraca tablicę obiektów JSON, to nie jest to obsługiwane.
Mapowania JSONPath zostały przetestowane na tym przykładowym pliku JSON:
{
"id": "u-123",
"user": {
"name": "Ada Lovelace",
"email": "ada@example.com",
"first-name": "Ada",
"meta": {
"active": true,
"score": 42,
"nullField": null
}
},
"store": {
"book": "abc",
"bike": "xyz",
"nested": {
"price": 9.99,
"currency": "EUR"
}
},
"groups": ["Admin", "HR"],
"groupObjects": [
{ "name": "Admin", "id": 1, "enabled": true },
{ "name": "HR", "id": 2, "enabled": false }
],
"child": {
"id": "child-1",
"child": {
"id": "child-2"
}
},
"storeList": [
{ "id": "s1", "name": "Shop 1", "price": 10 },
{ "id": "s2", "name": "Shop 2", "price": 20 }
],
"emptyArray": [],
"emptyObject": {},
"weirdKeys": {
"ab": "dot-key",
"space key": "space-key",
"brackets[key]": "bracket-key"
}
}Obsługiwane i nieobsługiwane składnie JSONPath
| Standardowa ścieżka JSON | Składnia używana w tabeli mapowania złączy | Przykładowy wynik | Notatki | Status |
|---|---|---|---|---|
$.id
|
id
|
"u-123"
|
Prosta własność skalarna | Utrzymany |
$.user.name
|
user.name
|
"Ada Lovelace"
|
Zagnieżdżona właściwość | Utrzymany |
$.user.email
|
user.email
|
"ada@example.com"
|
Zagnieżdżona właściwość | Utrzymany |
$.user['first-name']
|
user['first-name']
|
"Ada"
|
Notacja nawiasowa działa | Utrzymany |
$.user.meta.active
|
user.meta.active
|
true
|
Wartość logiczna | Utrzymany |
$.user.meta.score
|
user.meta.score
|
42
|
Wielokrotnie zagnieżdżona właściwość. Wartość liczbowa (mapowana na ciąg znaków lub liczbę) | Utrzymany |
$.store.nested.price
|
store.nested.price
|
9.99
|
Wielokrotnie zagnieżdżona właściwość. Wartość dziesiętna (mapa na ciąg znaków lub liczbę dziesiętną) | Utrzymany |
$.groups
|
groups
|
["Admin","HR"]
|
Tablica ciągów znaków (mapa na atrybut ciągu wielowartościowego) | Utrzymany |
$.groupObjects[*].name
|
groupObjects[*].name
|
["Admin","HR"]
|
Pro na tablicę ciągów znaków (mapa na atrybut ciągu wielowartościowego) | Utrzymany |
$.storeList[?(@.id=='s1')].price
|
storeList[?(@.id=='s1')].price
|
[10]
|
Filtr ciągów bez spacji | Utrzymany |
$.storeList[?(@.price<30)].id
|
storeList[?(@.price<30)].id
|
["s1","s2"]
|
Filtr numeryczny (mapa na atrybut ciągu wielowartościowego) Obsługiwane są również inne operatory porównania, takie jak: == <= >= > < != |
Utrzymany |
$.groupObjects[?(@.enabled==false)].name
|
groupObjects[?(@.enabled==false)].name
|
["HR"]
|
Filtr Boole'a (mapa na atrybut ciągu wielowartościowego) |
Utrzymany |
$.groupObjects
|
groupObjects
|
[{"name":"Admin",...},{"name":"HR",...}]
|
Zwraca tablicę obiektów JSON | Nieobsługiwane |
$.groupObjects[*]
|
groupObjects[*]
|
[{"name":"Admin",...},{"name":"HR",...}]
|
Pro zwraca tablicę obiektów JSON | Nieobsługiwane |
$.storeList[?(@.price<30)]
|
storeList[?(@.price<30)]
|
[{"id":"s1",...},{"id":"s2",...}]
|
Filtr zwraca tablicę obiektów JSON | Nieobsługiwane |
$.storeList[?(@.name=='Shop 1')].price
|
storeList[?(@.name=='Shop 1')].price
|
[10]
|
Filtr tekstowy zawierający spację nie działa | Nieobsługiwane |
$..id
|
..id
|
[ "u-123", "child-1", "child-2", ... ]
|
Zstąpienie rekurencyjne | Nieobsługiwane |
$.store.*
|
store.*
|
["abc","xyz",{...}]
|
Obiekt wieloznaczny | Nieobsługiwane |
Mapowania podzapytań
Pierwszą częścią mapowań podzapytań jest samo podzapytanie, następnie kropka i później faktyczna ścieżka JSONPath w taki sam sposób, jak w tabeli obsługiwanych składni JSONPath.
Przykład pobierania członkostwa użytkowników w grupach z Google
Podzapytanie: grupy?userKey={id}
W podzapytaniu {id} jest zmienną dynamiczną, która w tym przypadku wskazuje na główny atrybut id zestawu wyników zapytania. JSONPath nie jest obsługiwany w podzapytaniach.
Mapowanie dla tego podzapytania w celu pobrania identyfikatorów grup, do których należy dany użytkownik:
grupy?userKey={id}.groups[*].id, gdzie rzeczywista ścieżka JSONPath to ta część na końcu: grupy[*].id
Przykład interfejsu API grup Google w formacie JSON. Za pomocą podzapytania i mapowania możemy wybrać identyfikatory grup z tego zestawu wyników.
{
"kind": "directory#groups",
"etag": "\"p7cdf8ab12e9\"",
"groups": [
{
"kind": "directory#group",
" id ": " 01abcde123456789 ",
"etag": "\"abc123etag\"",
"email": "engineering@efectebaselinedev.onmicrosoft.com",
"name": "Engineering Team",
"description": "Main engineering group",
"directMembersCount": "15",
"adminCreated": true,
"aliases": [
"eng@efectebaselinedev.onmicrosoft.com"
],
"nonEditableAliases": [
"engineering@group.calendar.google.com"
]
},
{
"kind": "directory#group",
" id ": " 02xyz987654321 ",
"etag": "\"xyz456etag\"",
"email": "support@efectebaselinedev.onmicrosoft.com",
"name": "Support",
"description": "Customer support group",
"directMembersCount": "8",
"adminCreated": true
}
],
"nextPageToken": "CgYIARAA"
}
Table of Contents