Skip to content

Data Structure

めいびぃ edited this page Apr 20, 2026 · 18 revisions

JSON構造 -Data Structure-

このページでは、JSON データの構造について解説します。

📐 設計方針

  • JSON駆動:UIはデータに依存し、コード修正なしでキャラや敵を追加可能
  • 拡張性:新しいデータを追加しても既存構造を壊さない
  • 国際化:多言語対応を前提に設計 (i18n)

🗂️ データファイルの構成

📂 root/
└─ 📁 assets/
   └─ 📂 data/
      ├── 📁 languages/         # 言語データ
      │   ├─ en.json
      │   └─ jp.json
      ├── 📁 tables/
      │   ├─ attributes.json    # 属性テーブル
      │   ├─ match.json         # 属性相性補正テーブル
      │   ├─ miasma-buff.json   # ミアズマシールド補正テーブル
      │   └─ range.json         # 距離減衰補正テーブル
      ├─ agents.json            # エージェント情報
      ├─ enemies.json           # エネミー情報
      ├─ helpTexts.json         # ヘルプテキスト群
      └─ languages.json         # 言語の表記リスト

📄 ファイル構造

agents.json

  • エージェント情報
  • エージェント選択時に読み込まれるエージェント情報
{
  "anby": { 
    "factionId": "cunning_hares", 
    "specialtyId": "stun", 
    "attributeId": "electric", 
    "image": "anby.webp", 
    "rank": "a", 
    "link": "2" 
  },
}

フィールド説明

  • anby (name):エージェント名。識別IDとして使用。
  • factionId:陣営
  • specialtyId:役割
  • attributeId:属性
  • image:アイコン画像のファイル名 (webp形式)
  • rank:エージェントのランク
  • link:HoYoWikiのページURLの末番

enemies.json

  • エネミー情報
  • エネミー選択時に読み込まれるエネミー情報
{
  "tyrfing": { 
    "weakAttrId": ["ether", "ice"], 
    "resistAttrId": ["none"], 
    "image": "tyrfing.webp", 
    "material": "none",
    "link": "460" 
  },
  "newborn_dead_end_butcher": { 
    "weakAttrId": ["ether", "ice"], 
    "resistAttrId": ["none"], 
    "image": "newborn_dead_end_butcher.webp", 
    "material": "ferocious_grip", 
    "link": "417" 
  },
}

フィールド説明

  • tryfing (name):エネミー名。識別IDとして使用。
  • attrWeakId:弱点属性
  • attrResistId:耐性属性
  • image:アイコン画像のファイル名 (webp形式)
  • material:ドロップする強化素材の画像 (gif形式)
  • link:HoYoWikiのページURLの末番

helpTexts.json

  • (?)アイコンをクリックした時に読み込むテキスト群
  • ポップアップが表示される時に読み込まれる。
{
  "data-key": {
    "text": [
      "Text1",
      "Text2"
    ]
  },
}

フィールド説明

  • data-key:識別ID。
    • HTMLのタグ内に記載された data-key の値と連携している。
      <span class="info-circle info-btn" data-key="result">?</span>
  • Text1, Text2:ヘルプテキストとして表示されるテキスト。
    • ,で区切ることにより改行 <br>することが可能。
    • HTMLタグやタグよるCSS装飾も利用可能でテキストに直接書き込むことで適用される。

languages.json

  • 選択フィールドと連携している言語リスト
  • 選択フィールド生成時に読み込まれる。
{
  "jp": {
    "labelShort": "JP",
    "labelLong": "Japanese"
  },
  "en": {
    "labelShort": "EN",
    "labelLong": "English"
  }
}

フィールド説明

  • jp (lang):識別ID
  • labelShort:言語の省略表記。langSelect のディスプレイに表示される。
  • labelLong:言語の正規表記。langSelect のプルダウンリストに表示される。

言語ファイル (jp.json, en.json etc.)

  • ラベルを置換するための言語データ
  • 言語選択時に読み込まれる。
{
  "data-i18n": "Text"
}

記入例

// jp.json
{
  "headerTitle": "ゼンレスゾーンゼロ ダメージ計算ツール",
  "atk": "最終攻撃力 [N]",
  "agent.anby": "アンビー・デマラ",
  "faction.cunning_hares": "邪兎屋",
  "specialty.stun": "撃破",
  "attribute.electric": "電気",
  "enemy.tyrfing": "ティルヴィング"
}

// en.json
{
  "headerTitle": "Zenless Zone Zero Damage Calculate",
  "atk": "Attack [N]",
  "agent.anby": "Anby Demara",
  "faction.cunning_hares": "Cunning Hares",
  "specialty.stun": "Stun",
  "attribute.electric": "Electric",
  "enemy.tyrfing": "Tyrfing"
}

フィールド説明

  • data-i18n:識別ID。
    • HTMLのタグ内に記載された data-i18n の値と連携している。
      <label for="atk" class="form__label" data-i18n="atk">最終攻撃力 [N]</label>
    • Javascript上では agents.json や enemies.json の情報と連携する形で運用しており、関連するIDはカンマ区切りでカテゴライズしている。
    • 命名の仕方は基本的に英語表記を採用しており、小文字表記にし、スペースはアンダーバーに置換している。
  • Text:言語ごとに置換させたいテキスト。

attributes.json

  • 属性ごとのダメージ倍率をまとめたテーブル
  • 選択フィールド生成時や、状態異常ダメージ倍率へ補完する際に読み込まれる。
{
  "physical": {
    "anomalyCorr": 713,
    "label": "attribute.physical"
  },
  "electric": {
    "anomalyCorr": 1250,
    "label": "attribute.electric"
  }
}

フィールド説明

  • physical (attribute):識別ID
  • anomalyCorr:状態異常ダメージ倍率。入力フィールドに自動補完される。
  • label:国際化 (i18n) 用で使用。

match.json

  • 属性相性の倍率テーブル
  • 選択フィールド生成時や、自動補完されるときに読み込まれる。
{
  "none": {
    "value": 0,
    "label": "nonCorr"
  },
  "weak": {
    "value": -20,
    "label": "weakAttr"
  },
  "resist": {
    "value": 20,
    "label": "resistAttr"
  }
}

フィールド説明

  • none (match):識別ID
  • value:属性相性補正。入力フィールドに自動補完される。
  • label:国際化 (i18n) 用で使用。

miasma-buff.json

  • 特定のエネミーのみ倍率が違うミアズマシールドの補正をまとめたテーブル
  • 計算処理時に読み込まれる。
{
    "wandering_hunter": {
        "defUp": 100,
        "dmgCut": 25
    },
    "primordial_nightmare_the_creator": {
        "defUp": 10,
        "dmgCut": 50
    }
}

フィールド説明

  • wandering_hunter (name):エネミー名。識別IDとして使用。
  • defUp:防御力UP率
  • dmgCut:ダメージカット率

range.json

  • 距離減衰補正をまとめたテーブル
  • 選択フィールドの生成や、自動補完される時に読み込まれる。
{
  "0-15": 100,
  "15-20": 75,
  "20-25": 50,
  "25-": 25
}

フィールド説明

  • 0-15 (range):識別ID
  • 100 (value):距離減衰補正率。入力フィールドに自動補完される。