Overzicht van JSON Pointer

1. Overzicht

In deze tutorial we laten zien hoe u JSON Pointer gebruikt om te navigeren en informatie op te halen uit JSON-gegevens.

We laten ook zien hoe u bewerkingen kunt uitvoeren, zoals het invoegen van nieuwe gegevens of het bijwerken van bestaande sleutelwaarden.

2. Afhankelijkheid instellen

Eerst moeten we enkele afhankelijkheden toevoegen aan onze pom.xml:

 org.glassfish javax.json 1.1.2 

3. JSON-aanwijzer

JSON ("JavaScript Object Notation") is een lichtgewicht formaat voor het uitwisselen van gegevens tussen systemen, oorspronkelijk gespecificeerd door Douglas Crockford.

Hoewel het gebruikt JavaScript syntaxis, het is taalonafhankelijk, aangezien het resultaat platte tekst is.

JSON Pointer (RFC 6901) is een functie van JSON Processing 1.1 API (JSR 374). Het definieert een Draad die kan worden gebruikt voor toegang tot waarden in een JSON-document. Het kan te maken hebben met wat XPath doet voor een XML-document.

Door het gebruik van JSON Pointer kunnen we gegevens ophalen uit en een JSON-bestand wijzigen.

4. Toegang tot gegevens

We zullen enkele voorbeelden zien van hoe bewerkingen moeten worden uitgevoerd door een klasse met de naam te implementeren JsonPointerCrud.

Stel dat we een JSON-bestand hebben met de naam books.json met de inhoud:

{"library": "My Personal Library", "books": [{"title": "Title 1", "author": "Jane Doe"}, {"title": "Titel 2", "author": "John Doe" } ] }

Om toegang te krijgen tot de gegevens van dat bestand, moeten we het lezen en parseren naar een JsonStructure. We kunnen het bereiken met Json.createReader () methode, die een InputStream of een FileReader.

Hier is hoe we dat kunnen doen:

JsonReader-lezer = Json.createReader (nieuwe FileReader ("books.json")); JsonStructure jsonStructure = reader.read (); reader.close ();

De inhoud wordt opgeslagen op een JsonStructure voorwerp. Dit is het object dat we zullen gebruiken om de volgende bewerkingen uit te voeren.

4.1. Gegevens ophalen uit het bestand

Om een ​​enkele waarde op te halen, maken we een JsonPointer, om aan te geven van welke tag we de waarde willen krijgen:

JsonPointer jsonPointer = Json.createPointer ("/ bibliotheek"); JsonString jsonString = (JsonString) jsonPointer.getValue (jsonStructure); System.out.println (jsonString.getString ());

Let daar op het eerste karakter hiervan Draad is een '/' - dit is een syntactische vereiste.

Het resultaat van dit fragment is:

Mijn persoonlijke bibliotheek

Om een ​​waarde uit een lijst op te halen, moeten we de index specificeren (waarbij de eerste index 0 is):

JsonPointer jsonPointer = Json.createPointer ("/ books / 1"); JsonObject jsonObject = (JsonObject) jsonPointer.getValue (jsonStructure); System.out.println (jsonObject.toString ());

Dit levert:

"title": "Titel 2", "author": "John Doe"

4.2. Controleer of er een sleutel aanwezig is in het bestand

Door de methode bevatValuekunnen we controleren of de waarde die is gebruikt om de pointer te maken aanwezig is in het JSON-bestand:

JsonPointer jsonPointer = Json.createPointer ("/ bibliotheek"); boolean gevonden = jsonPointer.containsValue (jsonStructure); System.out.println (gevonden); 

Het resultaat voor dit fragment is:

waar

4.3. Voeg nieuwe sleutelwaarde in

Als we een nieuwe waarde aan de JSON moeten toevoegen, de waarde creëren is degene die ermee omgaat. De methode waarde creëren is overbelast om te accepteren Draad, int, lang, dubbele, BigDecimal en Groot geheel getal:

JsonPointer jsonPointer = Json.createPointer ("/ total"); JsonNumber jsonNumber = Json.createValue (2); jsonStructure = jsonPointer.add (jsonStructure, jsonNumber); System.out.println (jsonStructure);

Nogmaals, onze output is:

{"library": "My Personal Library", "total": 2, "books": [{"title": "Title 1", "author": "Jane Doe"}, {"title": "Titel 2 "," author ":" John Doe "}]}

4.4. Werk een sleutelwaarde bij

Om een ​​waarde bij te werken, moeten we eerst de nieuwe waarde creëren. Nadat de waarde is gecreëerd, gebruiken we de vervangen methode van de aanwijzer die is gemaakt met behulp van de sleutelparameter:

JsonPointer jsonPointer = Json.createPointer ("/ total"); JsonNumber jsonNumberNewValue = Json.createValue (5); jsonStructure = jsonPointer.replace (jsonStructure, jsonNumberNewValue); System.out.println (jsonStructure);

Uitvoeren:

{"library": "My Personal Library", "total": 5, "books": [{"title": "Title 1", "author": "Jane Doe"}, {"title": "Titel 2 "," author ":" John Doe "}]}

4.5. Verwijder een sleutel

Om een ​​sleutel te verwijderen, maken we eerst een wijzer naar de sleutel. We gebruiken dan de verwijderingsmethode:

JsonPointer jsonPointer = Json.createPointer ("/ bibliotheek"); jsonPointer.getValue (jsonStructure); jsonStructure = jsonPointer.remove (jsonStructure); System.out.println (jsonStructure);

Met als resultaat:

{"total": 5, "books": [{"title": "Titel 1", "author": "Jane Doe"}, {"title": "Titel 2", "author": "John Doe" }]}

4.6. Toon de volledige inhoud van het bestand

Als de aanwijzer is gemaakt met een leeg Draad, wordt de volledige inhoud opgehaald:

JsonPointer jsonPointer = Json.createPointer (""); JsonObject jsonObject = (JsonObject) jsonPointer.getValue (jsonStructure); System.out.println (jsonObject.toString ());

Dit codevoorbeeld zou de volledige inhoud van het jsonStructure.

5. Conclusie

In dit korte artikel hebben we besproken hoe u met JSON Pointer kunt werken om verschillende bewerkingen op JSON-gegevens uit te voeren.

En, zoals gewoonlijk, is de code met betrekking tot deze tutorial voorbij op GitHub.