Java EE 8 включает обновление API обработки JSON и обновляет его до последних стандартов IEFT для JSON. Они есть:
- JSON Pointer (RFC 6901)
- JSON Patch (RFC 6902)
- JSON Merge Patch (RFC 7396)
Я расскажу об этих темах в этом мини-сериале.
Начиная
Для начала работы с JSON-P вам понадобятся следующие зависимости из центрального репозитория Maven.
01
02
03
04
05
06
07
08
09
10
11
|
< dependency > < groupId >javax.json</ groupId > < artifactId >javax.json-api</ artifactId > < version >1.1</ version > </ dependency > < dependency > < groupId >org.glassfish</ groupId > < artifactId >javax.json</ artifactId > < version >1.1</ version > </ dependency > |
JSON-Pointer
Указатель JSON определяет строковое выражение, которое ссылается на элемент в иерархической структуре документа JSON. С помощью выражения указателя JSON вы можете обращаться к документу JSON и манипулировать им, получая, добавляя, удаляя и заменяя элемент или значение, на которое ссылается выражение.
API ввода — это интерфейс javax.json.JsonPointer . Экземпляр создается путем вызова статического метода фабрики createPointer (выражение String) класса javax.json.Json и передачи ему выражения указателя.
Получить значение
Если приведен документ JSON ниже и вы хотите получить значение элемента title, вы создаете выражение / заголовок JSON Pointer.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{ "title" : "Java EE: Only What's New" , "author" : "Alex Theedom" , "chapters" : [ "Chapter 1: Java EE 8 What’s New Overview" , "Chapter 2: Java API for JSON Binding 1.0 (JSR 367)" , "Chapter 3: Java EE Security API 1.0 (JSR 375)" ], "released" : true , "pages" : 300, "sourceCode" : { "repositoryName" : "Java-EE-8-Only-Whats-New" , "url" : "github.com/readlearncode/" }, "otherBooks" : [ { "title" : "Professional Java EE Design Patterns" , "length" : 350 } ] } JsonObject jsonObject = ... create JSONObject from JSON document ...; |
Фрагмент кода ниже создает JsonPointer и ссылается на элемент title . Затем он вызывает метод getValue (), который передается в запрос JsonObject .
1
|
JsonValue jsonValue = Json.createPointer( "/title" ).getValue(jsonObject); |
Добавить значение
Чтобы добавить (или вставить) значение в документ JSON, следуйте той же логике, что и при извлечении, используя выражение указателя JSON для определения точки вставки в документе. Следующий фрагмент кода добавляет новую «категорию»: «Программирование» объекта JSON в корень документа.
1
2
3
|
JsonObject jsonObject = Json .createPointer( "/category" ) .add(jsonObject, Json.createValue( "Programming" )); |
Возвращаемый объект JsonObject — это весь новый измененный объект.
Удалить значение
Процесс удаления требует расположения значения для удаления, выраженного в виде выражения JSON Pointer. Приведенный ниже фрагмент кода удаляет элемент title и возвращает измененный документ JSON в качестве экземпляра JsonStructure.
1
|
JsonStructure jsonStructure = Json.createPointer( "/title" ).remove(jsonObject); |
Заменить значение
Чтобы заменить значение, выражение указателя JSON элемента, подлежащего замене, и элемента замены передается методу replace () . Приведенный ниже фрагмент кода заменяет значение элемента title и возвращает измененный документ JSON.
1
2
3
|
JsonStructure jsonStructure = Json .createPointer( "/title" ) .replace(jsonObject, Json.createValue( "Java EE 8" )); |
Проверьте значение
Существование значения в местоположении может быть проверено с помощью метода containsValue () . Приведенный ниже фрагмент кода проверяет, есть ли в месте значение, выраженное выражением JSON Pointer / doesNotExist .
1
2
3
|
Boolean containsValue = Json .createPointer( "/doesNotExist" ) .containsValue(jsonObject); |
Вывод
Ну вот и все для первой статьи в этой мини-серии о новых возможностях JSON Processing. Это все на данный момент.
Опубликовано на Java Code Geeks с разрешения Алекса Тидома, партнера нашей программы JCG. Посмотрите оригинальную статью здесь: Познакомьтесь с JSON Pointer: JSON-P 1.1 Обзор серии
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |