{"id":39624001,"url":"https://github.com/vemikrs/jackson-databind-jsonc","last_synced_at":"2026-01-18T08:32:51.857Z","repository":{"id":269558806,"uuid":"864799478","full_name":"vemikrs/jackson-databind-jsonc","owner":"vemikrs","description":"Jacksonの JsonMapper を拡張しJSONC（またはJSON5）形式を処理する ObjectMapper","archived":false,"fork":false,"pushed_at":"2025-12-15T09:42:14.000Z","size":378,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-18T09:15:58.471Z","etag":null,"topics":["jackson","jackson-json"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vemikrs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-09-29T07:36:27.000Z","updated_at":"2025-12-15T09:42:10.000Z","dependencies_parsed_at":"2025-07-11T00:46:37.055Z","dependency_job_id":"31443f6a-6bd6-4cce-ac7c-bc74e8a0a9a1","html_url":"https://github.com/vemikrs/jackson-databind-jsonc","commit_stats":null,"previous_names":["vemidas/jackson-databind-jsonc","vemic/jackson-databind-jsonc","vemikrs/jackson-databind-jsonc"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/vemikrs/jackson-databind-jsonc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemikrs%2Fjackson-databind-jsonc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemikrs%2Fjackson-databind-jsonc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemikrs%2Fjackson-databind-jsonc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemikrs%2Fjackson-databind-jsonc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vemikrs","download_url":"https://codeload.github.com/vemikrs/jackson-databind-jsonc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vemikrs%2Fjackson-databind-jsonc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jackson","jackson-json"],"created_at":"2026-01-18T08:32:51.767Z","updated_at":"2026-01-18T08:32:51.843Z","avatar_url":"https://github.com/vemikrs.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"言語: 日本語 | [English](./README_en.md)\n\n# Jackson-Databind-Jsonc\n\n[![Maven Central](https://img.shields.io/maven-central/v/jp.vemi/jackson-databind-jsonc.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/jp.vemi/jackson-databind-jsonc)\n[![javadoc](https://javadoc.io/badge2/jp.vemi/jackson-databind-jsonc/latest/javadoc.svg)](https://javadoc.io/doc/jp.vemi/jackson-databind-jsonc/latest/)\n[![Release Workflow](https://github.com/vemikrs/jackson-databind-jsonc/actions/workflows/release.yml/badge.svg)](https://github.com/vemikrs/jackson-databind-jsonc/actions/workflows/release.yml)\n\nこのプロジェクトは、Jackson の `JsonMapper` を拡張し、JSONC（コメント付きJSON）を扱える `JsoncMapper` を提供します。\n\n## 特長\n\n- JSONC 形式をサポート（ブロックコメント `/* */` と 行末コメント `//`）\n- Builder パターンによるオプションのJSON5機能\n  - シングルクォート文字列（`'text'` → `\"text\"`）\n  - 16進数リテラル（`0xFF` → `255`）\n  - プラス記号付き数値（`+123` → `123`）\n  - 無限大やNaN（`Infinity`/`NaN` → `null`）\n  - 複数行文字列とエスケープされていない制御文字\n- Jackson の `JsonMapper` を拡張\n- 複数の Java バージョンをサポート（Java 8, 11, 17, 21, 24）\n- 2 つの配布形式（Slim / All-in-One）\n- ReDoS攻撃に対する保護機能（線形時間アルゴリズム）\n- トレーリングカンマ除去機能（オプション）\n\n## サポートされるコメント形式\n\n### ✅ 完全サポート\n- ブロックコメント: `/* コメント */`（複数行）\n- 行末コメント: `// コメント`（行末まで）\n- マルチラインコメント（複数行）\n- 文字列内コメント保護（JSON文字列内のコメントは保持）\n\n```javascript\n{\n  /* 設定ファイルのメインセクション */\n  \"database\": {\n    \"host\": \"localhost\", // デフォルトホスト\n    \"port\": 5432,\n    /* 複数行コメント\n       データベース設定の\n       詳細説明 */\n    \"timeout\": 30\n  },\n  \"message\": \"This /* is not removed */ from string\" // 文字列内は保護\n}\n```\n\n### ❌ 未対応機能\n- ネストコメント: `/* 外側 /* 内側 */ 外側 */`\n- JSON5のその他機能（オブジェクトキーの引用符省略 等）\n\n### 🔧 オプションのJSON5機能（Builderで選択）\n\n- トレーリングカンマ除去\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowTrailingCommas(true)\n    .build();\n```\n\n- シングルクォート文字列\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowSingleQuotes(true)\n    .build();\n// 入力: { 'key': 'value' }\n// 出力: { \"key\": \"value\" }\n```\n\n- 16進数リテラル\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowHexNumbers(true)\n    .build();\n// 入力: { \"value\": 0xFF }\n// 出力: { \"value\": 255 }\n```\n\n- プラス記号付き数値\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowPlusNumbers(true)\n    .build();\n// 入力: { \"value\": +123 }\n// 出力: { \"value\": 123 }\n```\n\n- 無限大とNaN\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowInfinityAndNaN(true)\n    .build();\n// 入力: { \"inf\": Infinity, \"nan\": NaN }\n// 出力: { \"inf\": null, \"nan\": null }\n```\n\n- 複数行/制御文字\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowMultilineStrings(true)\n    .allowUnescapedControlChars(true)\n    .build();\n```\n\n- すべての機能を組み合わせ\n```java\nJsoncMapper mapper = new JsoncMapper.Builder()\n    .allowTrailingCommas(true)\n    .allowSingleQuotes(true)\n    .allowHexNumbers(true)\n    .allowPlusNumbers(true)\n    .allowInfinityAndNaN(true)\n    .allowMultilineStrings(true)\n    .allowUnescapedControlChars(true)\n    .build();\n```\n\n## 要件\n\n- Java 8（最低要件）/ 11 / 17 / 21 / 24（予定）\n- ビルド: Java 21 が必要（生成バイトコードは `--release 8` により Java 8 互換）\n\n## 配布形式\n\n### Slim JAR（推奨）\n- ファイル: `jackson-databind-jsonc-\u003cversion\u003e.jar`（~5KB）\n- 用途: モダンな Jackson 環境、Maven/Gradle プロジェクト\n- 依存関係: Jackson Databind 2.20.0+ が必要\n- Maven: `jp.vemi:jackson-databind-jsonc:\u003cversion\u003e`\n- Gradle: `implementation(\"jp.vemi:jackson-databind-jsonc:\u003cversion\u003e\")`\n\n### All-in-One JAR（エンタープライズ）\n- ファイル: `jackson-databind-jsonc-\u003cversion\u003e-all.jar`（~7.8MB）\n- 用途: エンタープライズ/レガシー環境、依存関係競合回避\n- 依存関係: 自己完結（Jackson 同梱）\n- Maven: `jp.vemi:jackson-databind-jsonc-all:\u003cversion\u003e`\n- Gradle: `implementation(\"jp.vemi:jackson-databind-jsonc-all:\u003cversion\u003e\")`\n\n## インストール\n\n\u003e 最新版は Maven Central から取得可能（自動公開: Central Portal）\n\n### Maven（Slim JAR）\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ejp.vemi\u003c/groupId\u003e\n  \u003cartifactId\u003ejackson-databind-jsonc\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.5\u003c/version\u003e\n  \u003c/dependency\u003e\n```\n\n### Gradle（Slim JAR）\n```groovy\nimplementation 'jp.vemi:jackson-databind-jsonc:1.0.5'\n```\n\n### Maven（All-in-One JAR）\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ejp.vemi\u003c/groupId\u003e\n  \u003cartifactId\u003ejackson-databind-jsonc-all\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.5\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle（All-in-One JAR）\n```groovy\nimplementation 'jp.vemi:jackson-databind-jsonc-all:1.0.5'\n```\n\n### 手動インストール\n1. [Releases](https://github.com/vemikrs/jackson-databind-jsonc/releases) から JAR をダウンロード\n2. プロジェクトのクラスパスに追加\n\n**📋 リリース情報:**\n- 自動公開: Maven Central Portal 経由\n- 手動取得: GitHub Releases でJARにアクセス\n- 詳細: [PUBLISHING.md](./PUBLISHING.md)\n\n## API ドキュメント\n\n- 最新版（javadoc.io）: https://javadoc.io/doc/jp.vemi/jackson-databind-jsonc/latest/\n- バージョン指定例: https://javadoc.io/doc/jp.vemi/jackson-databind-jsonc/1.0.5/\n- ローカル生成: `./gradlew javadoc` 後 `lib/build/docs/javadoc/index.html`\n\n## どちらの JAR を使うべきか\n\n### Slim JAR を選ぶ場合\n- ✅ Jackson 2.20.0+ を利用可能\n- ✅ 依存関係を Maven/Gradle で管理できる\n- ✅ 他ライブラリとの競合がない\n- ✅ JAR サイズを最小化したい\n\n### All-in-One JAR を選ぶ場合\n- ✅ エンタープライズ Java アプリケーション環境\n- ✅ 既存の Jackson バージョンが固定されている\n- ✅ 依存関係の競合を避けたい\n- ✅ 単一 JAR 配布が必要\n- ✅ 複雑な依存関係管理を避けたい\n\n## 使い方\n\n```java\nJsoncMapper mapper = new JsoncMapper();\nString jsonWithComments = \"\"\"\n{\n  /* Block comment */\n  \"name\": \"example\", // End-of-line comment\n  \"value\": 42\n}\n\"\"\";\nMyClass obj = mapper.readValue(jsonWithComments, MyClass.class);\n```\n\n## パフォーマンス\n\n- 通常サイズ（\u003c 10MB）: 高速、メモリ使用量は約1.5倍\n- 大きなファイル（\u003e 10MB）: 事前コメント除去を推奨\n\n## セキュリティ\n\n- 正規表現非依存の線形時間アルゴリズムで ReDoS 耐性\n- null 入力は `IllegalArgumentException` を送出\n- 文字列内のコメント風テキストは保持\n\n## 開発\n\n### ビルドとテスト\n- ビルドには Java 21 が必要（生成バイトコードは `--release 8` で Java 8 互換）\n\n```bash\n./gradlew build\n./gradlew test\n```\n\n### CI / Build \u0026 Test Status\n- Release Workflow: 上部バッジ、または [Actions \u003e Release](https://github.com/vemikrs/jackson-databind-jsonc/actions/workflows/release.yml)\n- テストレポート（ローカル）: `lib/build/reports/tests/test/index.html`\n- GitHub Actions での一般的な確認手順:\n  - Actions タブ → 対象ワークフロー → 実行ログの Summary で成功/失敗を確認\n  - 必要に応じてアップロード済みアーティファクト（JAR等）をダウンロード\n\n## トラブルシューティング（抜粋）\n\n### 依存関係の競合\n```xml\n\u003c!-- Maven の場合（All-in-One は別アーティファクト） --\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003ejp.vemi\u003c/groupId\u003e\n  \u003cartifactId\u003ejackson-databind-jsonc-all\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.5\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### ClassNotFoundException\n- Slim JAR: Jackson 2.20.0+ 依存を確認\n- All-in-One JAR: 単一JARが classpath にあるか確認\n\n### ビルド関連\n```bash\njava -version # Java 21 を確認\nexport JAVA_HOME=/path/to/java21\n./gradlew clean build --refresh-dependencies\n```\n\n## リソース\n- [MIGRATION_NOTES.md](./MIGRATION_NOTES.md)\n- [PUBLISHING.md](./PUBLISHING.md)\n- [SECURITY.md](./SECURITY.md)\n- [LICENSE](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvemikrs%2Fjackson-databind-jsonc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvemikrs%2Fjackson-databind-jsonc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvemikrs%2Fjackson-databind-jsonc/lists"}