[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-serializatsiya-kak-rabotat-s-json-v-java-bez-bibliotek-i-s-jakarta-json-p-json-b":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},983,"kak-rabotat-s-json-v-java-bez-bibliotek-i-s-jakarta-json-p-json-b",30,"serializatsiya","Сериализация","📦","Как работать с JSON в Java без библиотек и с Jakarta JSON-P\u002FJSON-B?","В Jakarta EE существуют два стандартных API: JSON-P (JSON Processing) для низкоуровневого парсинга и JSON-B (JSON Binding) для привязки к объектам. Оба входят в спецификацию Jakarta EE, но на практике Jackson используется значительно чаще.\n\n### JSON-P (Jakarta JSON Processing)\n\nНизкоуровневый API для парсинга, генерации и трансформации JSON. Работает на двух уровнях: потоковом (`JsonParser`\u002F`JsonGenerator`) и объектном (`JsonObject`\u002F`JsonArray`).\n\n\u003Cdetails>\n\u003Csummary>Пример JSON-P: построение и чтение JSON\u003C\u002Fsummary>\n\n```java\nimport jakarta.json.Json;\nimport jakarta.json.JsonObject;\nimport jakarta.json.JsonReader;\nimport jakarta.json.JsonWriter;\nimport java.io.StringReader;\nimport java.io.StringWriter;\n\npublic class JsonPExample {\n    public static void main(String[] args) {\n        \u002F\u002F Построение JSON-объекта\n        JsonObject json = Json.createObjectBuilder()\n                .add(\"name\", \"Иван\")\n                .add(\"age\", 30)\n                .add(\"skills\", Json.createArrayBuilder()\n                        .add(\"Java\")\n                        .add(\"Spring\")\n                        .build())\n                .build();\n\n        \u002F\u002F Запись в строку\n        StringWriter sw = new StringWriter();\n        try (JsonWriter writer = Json.createWriter(sw)) {\n            writer.writeObject(json);\n        }\n\n        \u002F\u002F Чтение из строки\n        String input = \"\"\"\n            {\"name\":\"Мария\",\"age\":25}\n            \"\"\";\n        try (JsonReader reader = Json.createReader(new StringReader(input))) {\n            JsonObject obj = reader.readObject();\n            String name = obj.getString(\"name\");  \u002F\u002F \"Мария\"\n            int age = obj.getInt(\"age\");           \u002F\u002F 25\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### JSON-B (Jakarta JSON Binding)\n\nВысокоуровневый API — аналог Jackson\u002FGson в мире Jakarta EE. Автоматическая привязка JSON к Java-объектам.\n\n\u003Cdetails>\n\u003Csummary>Пример JSON-B: аннотации и маппинг\u003C\u002Fsummary>\n\n```java\nimport jakarta.json.bind.Jsonb;\nimport jakarta.json.bind.JsonbBuilder;\nimport jakarta.json.bind.annotation.JsonbProperty;\nimport jakarta.json.bind.annotation.JsonbTransient;\nimport jakarta.json.bind.annotation.JsonbDateFormat;\n\npublic class Employee {\n    @JsonbProperty(\"full_name\")\n    private String name;\n\n    @JsonbTransient\n    private String internalCode;\n\n    @JsonbDateFormat(\"dd.MM.yyyy\")\n    private LocalDate hireDate;\n}\n\n\u002F\u002F Использование\nJsonbConfig config = new JsonbConfig()\n        .withFormatting(true)\n        .withNullValues(false);\n\ntry (Jsonb jsonb = JsonbBuilder.create(config)) {\n    String json = jsonb.toJson(employee);          \u002F\u002F Сериализация\n    Employee restored = jsonb.fromJson(json, Employee.class); \u002F\u002F Десериализация\n}\n```\n\n\u003C\u002Fdetails>\n\n### Сравнение подходов\n\n| Критерий | JSON-P | JSON-B | Jackson |\n|----------|--------|--------|---------|\n| Уровень | Низкоуровневый (парсинг) | Высокоуровневый (binding) | Оба |\n| Стандарт | Jakarta EE | Jakarta EE | Де-факто стандарт |\n| Гибкость | Высокая | Средняя | Очень высокая |\n| Экосистема | Ограниченная | Ограниченная | Огромная (модули) |\n| Spring Boot | Не по умолчанию | Не по умолчанию | По умолчанию |\n| Реализация | Eclipse Parsson | Eclipse Yasson | Встроена |\n\n### Частые ошибки\n\n- Путаница между `javax.json` (старый Java EE) и `jakarta.json` (новый Jakarta EE) — пакеты несовместимы\n- Попытка использовать JSON-P для сложного маппинга — для этого нужен JSON-B или Jackson\n- Отсутствие реализации в classpath — JSON-P\u002FJSON-B это интерфейсы, нужна реализация (Parsson, Yasson)\n- Смешивание аннотаций JSON-B и Jackson — они не взаимозаменяемы\n\n> **На собеседовании:** достаточно знать, что JSON-P\u002FJSON-B существуют как часть Jakarta EE, и объяснить разницу: JSON-P — низкоуровневый парсинг, JSON-B — object binding. На практике даже в Jakarta EE проектах многие используют Jackson.","","middle",[15],"serialization",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Как работать с JSON в Java без библиотек и с Jakarta JSON-P\u002F — Gymterview","В Jakarta EE существуют два стандартных API: JSON-P (JSON Processing) для низкоуровневого парсинга и JSON-B (JSON Binding) для привязки к объектам. Оба входят в","В Jakarta EE существуют два стандартных API: JSON-P (JSON Processing) для низкоуровневого парсинга и JSON-B (JSON Bindin",[15,13],"В Jakarta EE существуют два стандартных API: JSON-P (JSON Processing) для низкоуровневого парсинга и JSON-B (JSON Binding) для привязки к объектам. Оба входят в спецификацию Jakarta EE, но на практике Jackson используется значительно чаще.",true]