• 游戏中会存放许多数据,而存放的数据也分为动态数据静态数据
    • 动态数据:数据会频繁地改变,如当前玩家位置,玩家血量等数据。通常存储在数据库中。
    • 静态数据:数据不会频繁改变,如游戏角色的技能冷却时间,地图结构,障碍物位置等基础配置。通常存储在配置文件中。

JSON

  • JSON是一种轻量级的数据交换格式,它基于JavaScript语言,但是它不是JavaScript语言。

  • JSON对象:键值对,用花括号括起来,键和值用冒号隔开,多个键值对用逗号隔开。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    "name": "myApp",
    "version": 1.0,
    "debug": true,
    "database": {
    "host": "localhost",
    "port": 3306
    },
    "features": ["auth", "logging", "metrics"]
    }
  • 语法简洁,结构清晰方便解析
  • 跨语言支持广泛,各种语言都有对应的库可以解析JSON数据
  • 与XML相比,JSON更轻量,占用更少空间,传输更快
  • JSON不支持注释
  • JSON不支持对象继承
  • 配置过大时可读性下降
  • Web配置或前后端数据交换
  • 需要语言跨兼容的配置文件

YAML

  • YAML是一种数据序列化格式,是一种可读性高的数据格式,但对缩进要求十分严格。

  • YAML对象:根据缩进来表示层级关系。键值对,用冒号隔开,冒号和值之间应当有一个空格。

    • 语法简洁,结构清晰,缩进层次较小时能一眼看出
    • 支持注释(#开头)
    • 缩进敏感,容易因缩进错误导致解析失败
    • 不同解析器实现可能有差异

XML

  • XML是一种可扩展标记语言,可以高效且精准的描述层次化结构。
  • XML对象:用标签来表示数据的开始和结束,标签可以嵌套。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<config>
<name>myApp</name>
<version>1.0</version>
<debug>true</debug>
<database>
<host>localhost</host>
<port>3306</port>
</database>
<features>
<feature>auth</feature>
<feature>logging</feature>
<feature>metrics</feature>
</features>
</config>
  • 结构化数据表达能力强,支持层次、属性、命名空间
  • 可扩展性好,支持自定义标签
  • 支持模式约束,方便数据校验
  • 语法较复杂,可读性差
  • 文件体积大,传输速度慢
  • 对手动编辑不友好
  • 传统企业级项目(如 Java EE 配置、Spring XML)
  • 需要严格数据校验的系统
  • 文档型数据存储(Office 文档格式底层就是 XML)

INI

  • INI是一种用于配置文件的格式,它基于键值对,用等号(=)来分隔键和值。
  • INI对象:使用方括号划分不同的区域名,区域内的键值对表示该区域的配置。并且可以在分号后编写单行注释。
1
2
3
4
5
6
7
8
9
10
11
12
13
[app]
name=myApp
version=1.0
debug=true

[database]
host=localhost
port=3306 ; 数据库端口号

[features]
auth=true
logging=true
metrics=true
  • 语法简单,结构清晰
  • 编辑方便,适合小型项目配置
  • 支持分区,方便管理
  • 数据类型有限(通常只能表示字符串,需要应用层解析)。
  • 不支持复杂嵌套
  • 没有严格标准,不同解析器可能有差异
  • 小型应用、本地配置文件
  • 桌面软件设置、轻量级服务配置
  • 不需要复杂嵌套的场景

总结

格式可读性表达能力解析性能注释常见场景
JSON中等中等Web API、微服务
YAML中等支持DevOps、K8s、CI/CD
XML很高支持企业级应用、模式验证
INI部分小型应用、本地配置
格式可读性文件体积解析速度跨平台兼容性适用场景
YAML★★★★☆中等较好人工可读配置(如 CI/CD、游戏配置)
INI★★★★☆很小很快一般简单应用配置(桌面软件、老系统)
JSON★★★☆☆很快极佳前后端通信、现代应用配置
XML★★☆☆☆极佳需要严格结构/文档描述(如 SOAP、旧系统)