Общ преглед на JSON Pointer

1. Общ преглед

В този урок ще покажем как да използваме JSON Pointer за навигация и извличане на информация от JSON данни .

Ще покажем и как да изпълняваме операции като вмъкване на нови данни или актуализиране на съществуващи ключ-стойности.

2. Настройка на зависимостта

Първо, трябва да добавим някои зависимости към нашия pom.xml :

 org.glassfish javax.json 1.1.2 

3. JSON указател

JSON („JavaScript Object Notation“) е лек формат за обмен на данни между системи, първоначално определен от Дъглас Крокфорд.

Въпреки че използва синтаксис на JavaScript , той не зависи от езика, тъй като резултатът е обикновен текст .

JSON Pointer (RFC 6901) е функция от JSON Processing 1.1 API (JSR 374). Той дефинира низ, който може да се използва за достъп до стойности в JSON документ. Тя може да бъде свързана с това, което XPath прави за XML документ.

Чрез използването на JSON Pointer можем да извлечем данни от и да променим JSON файл.

4. Достъп до данни

Ще видим няколко примера за това как да изпълняваме операции чрез внедряване на клас, наречен JsonPointerCrud .

Да предположим, че имаме JSON файл, наречен books.json със съдържание:

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

За да осъществим достъп до данните от този файл, трябва да ги прочетем и анализираме в JsonStructure . Можем да го постигнем с помощта на метода Json.createReader () , който приема InputStream или FileReader .

Ето как можем да направим това:

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

Съдържанието ще се съхранява в обект JsonStructure . Това е обектът, който ще използваме за извършване на следващи операции.

4.1. Извличане на данни от файла

За да извлечем една стойност, ние създаваме JsonPointer , информиращ от кой маркер искаме да получим стойността:

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

Имайте предвид, че първият символ на този низ е ' /' - това е синтактично изискване .

Резултатът от този фрагмент е:

My Personal Library

За да извлечем стойност от списък, трябва да посочим нейния индекс (където първият индекс е 0):

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

Това извежда:

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

4.2. Проверете дали във файла присъства ключ

Чрез метода containsValue можем да проверим дали стойността, използвана за създаване на показалеца, присъства в JSON файла:

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

Резултатът за този фрагмент е:

true

4.3. Поставете нов ключ-стойност

Ако трябва да добавим нова стойност към JSON, createValue е този, който ще се справи с него. Методът createValue е претоварен, за да приеме String , int , long , double , BigDecimal и BigInteger:

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

Отново изходът ни е:

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

4.4. Актуализирайте ключ-стойност

За да актуализираме стойност, първо трябва да създадем новата стойност . След създаването на стойността използваме метода замяна от указателя, създаден с помощта на ключовия параметър:

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

Изход:

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

4.5. Премахнете ключ

За да премахнем ключ, първо създаваме указател към ключа. След това използваме метода за премахване:

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

В резултат на което:

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

4.6. Показване на пълното съдържание на файла

Ако показалецът е създаден с празен низ , извлича се цялото съдържание:

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

Тази проба на кода ще изведе цялото съдържание на jsonStructure .

5. Заключение

В тази бърза статия разгледахме как да работим с JSON Pointer за извършване на различни операции върху JSON данни.

Както обикновено, кодът, свързан с този урок, е свършен на GitHub.