Edit Unreal Engine DataTable configuration through JSON files — auto-discover projects, search, modify, validate, and import back to the engine.
UE projects commonly store DataTable data in .uasset files, with corresponding JSON source files that serve as the editable representation. This skill provides a complete workflow for discovering, modifying, and re-importing these data tables.
This skill works with any UE project — it automatically detects the project structure and locates DataTable JSON files. No hardcoded paths required.
The JSON file should be an array of objects, each with a Name field as the row key:
[
{ "Name": "230000", "DevName": "技能名", "LOC_Name": "NSLOCTEXT(...)", ... },
{ "Name": "230001", ... }
]
.uasset files are binary and cannot be edited directly — always modify through JSON then import.
ALWAYS run this step first when the user has not provided a specific JSON path. Use scripts/dt_discover.py to auto-detect UE projects and DataTable JSON files:
# Auto-discover all UE projects and DataTable JSON files in common locations
python {SKILL_DIR}/scripts/dt_discover.py
# Search in a specific directory
python {SKILL_DIR}/scripts/dt_discover.py --root "<directory>"
# Find a specific table by name (matches JSON filename)
python {SKILL_DIR}/scripts/dt_discover.py --table "AI_Skills"
# Filter by UE project name
python {SKILL_DIR}/scripts/dt_discover.py --project "SMG"
# Output as JSON for parsing
python {SKILL_DIR}/scripts/dt_discover.py --json-output
When the user provides a table name (e.g. "修改 AI_Skills 表"), use --table to locate the matching JSON file:
python {SKILL_DIR}/scripts/dt_discover.py --table "<user_provided_table_name>"
Once the JSON file is identified, store its absolute path for use in subsequent steps.
Use scripts/dt_search.py to locate the row(s) to modify. The --json parameter takes the path discovered in Step 0.
# Search by row ID
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --id 230000
# Search by name keyword
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --name "蓄力"
# Search by any field
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --field DevName --value "瞬移"
# List all rows in a Part (for AI Skills tables)
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --part 1
# Show full JSON for results
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --id 230000 --full
# List all available fields
python {SKILL_DIR}/scripts/dt_search.py --json <json_path> --list-fields
Present search results to the user before proceeding with modifications.
Use scripts/dt_modify.py to modify fields. The script automatically:
NSLOCTEXT() format for localization fields
# Modify LOC_Desc (auto-wraps in NSLOCTEXT)
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --id 230000 --set-loc-desc "对随机角色造成伤害"
# Modify LOC_Name
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --id 230000 --set-loc-name "新技能名"
# Modify any field
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --id 230000 --set "bUseAlert=true" --set "DevName=新名称"
# Preview without saving (dry-run)
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --id 230000 --set-loc-desc "测试" --dry-run
# Validate entire JSON
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --validate
For localization fields (LOC_Name, LOC_Desc, LOC_AlertText, LOC_InterruptMessage, LOC_NoticeText):
NSLOCTEXT("", "_", "")
NSLOCTEXT(...) or INVTEXT(...) string, it is used as-is
--no-wrap flag to disable auto-wrapping
For complex modifications (nested objects, arrays, or bulk changes), directly edit the JSON file using replace_in_file or read_file + write_to_file tools. Always validate after editing:
python {SKILL_DIR}/scripts/dt_modify.py --json <json_path> --validate
After modifying and validating the JSON, generate the UE import command. The user must execute this command in the UE Editor Output Log:
py "{SKILL_DIR}/scripts/dt_import_ue.py" --json "<json_path>" --part <part_number>
Parameters:
--part 0 — Import Part0 (ID 200000–229999)
--part 1 — Import Part1 (ID 230000–239999)
--part 2 — Import Part2 (ID 240000–249999)
--part all — Import all Parts
--asset-base "" — Override the UE asset base path (default: /Game/SMG/Configs/DataTables/AISkills)
Determine the correct --part number from the row ID being modified. Always provide the full command with absolute paths for the user to copy-paste.
After the user reports the UE import result, check the log output for:
Imported DataTable '...' - 0 Problems = Success
Error lines = Investigation needed
Refer to references/field_schema.md for the complete field documentation when needed.
User says: "修改 AI_Skills 表中技能 230005 的描述"
python {SKILL_DIR}/scripts/dt_discover.py --table "AI_Skills"
→ Found: D:\Projects\MyGame\Content\Configs\Json\Json_AI_Skills.json
python {SKILL_DIR}/scripts/dt_search.py --json "" --id 230005
→ Shows current skill data
python {SKILL_DIR}/scripts/dt_modify.py --json "" --id 230005 --set-loc-desc "新的描述文本"
→ Modifies and validates
| Error | Cause | Solution |
|-------|-------|----------|
| No UE project found | Project not in search paths | Use --root to specify project directory |
| No DataTable JSON found | JSON file not in Content directory | Check project structure, provide path manually |
| UnicodeDecodeError | Wrong encoding detection | Scripts auto-detect; if issues persist, check file BOM bytes |
| fill_data_table_from_json_string fails | JSON fields don't match RowStruct | Validate JSON, check for missing/extra fields |
| DataTable not found | Wrong asset path | Use --asset-base to specify correct UE asset path |
| P4 checkout failure | File locked by another user | Coordinate with team or force checkout |
共 1 个版本