1195 字
6 分钟

xml和json的快速上手:初学者实用指南

2025-11-12
浏览量 加载中...

从XML入门到JSON扩展:初学者实用指南#

引言#

欢迎阅读这份实用指南!如果你是数据格式新手,从XML起步是个好选择。XML(Extensible Markup Language)是结构化数据的“老将”,广泛用于配置文件和文档。随后,我们扩展到JSON(JavaScript Object Notation)——一种轻量级、现代格式,主导Web API和NoSQL数据库。

为什么这个路径?

  • XML:教你“标签化结构”,强调层次和验证。
  • JSON:扩展到“键值对简洁”,更易读写,适合编程集成。
  • 实用性:每节有示例和练习,使用工具如在线编辑器(XML Validator、JSONLint)或代码(Python/JavaScript)。

前提:无需安装复杂工具。用浏览器打开在线编辑器,或安装VS Code(带XML/JSON插件)。假设你有基本文本编辑知识。

学习建议:边读边验证示例。预计时间:XML入门1周,JSON扩展1周。


第一部分:XML入门#

XML是自描述的标记语言,用标签定义数据。核心规则:标签配对、嵌套、属性。

1.1 第一个XML:简单文档#

基本结构:

  • <?xml version="1.0" encoding="UTF-8"?>:声明。
  • 根元素:唯一顶级标签。
  • 关闭标签:<tag>内容</tag>

示例(书籍目录):

<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1">
<title>Hello World</title>
<author>John Doe</author>
<year>2023</year>
</book>
<book id="2">
<title>XML Basics</title>
<author>Jane Smith</author>
<year>2024</year>
</book>
</library>

验证:复制到XML Validator检查语法。

练习:添加第三本书,包含<price>29.99</price>

1.2 元素、属性与命名空间#

  • 元素:标签内容,如<title>Text</title>
  • 属性:标签内附加,如id="1"
  • 命名空间:避免冲突,用xmlns

示例(带属性和命名空间):

<?xml version="1.0" encoding="UTF-8"?>
<library xmlns:dc="http://purl.org/dc/elements/1.1/">
<book id="1" dc:creator="John Doe">
<title>Hello World</title>
<year>2023</year>
</book>
</library>

规则:属性用引号;元素名区分大小写;无重叠标签。

练习:为书籍添加genre="Fiction"属性。

1.3 DTD与XML Schema(简单验证)#

DTD(Document Type Definition):定义结构。

<!DOCTYPE library [
<!ELEMENT library (book+)>
<!ELEMENT book (title, author, year)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ATTLIST book id ID #REQUIRED>
]>

置于XML前:<!DOCTYPE library SYSTEM "library.dtd">(需外部文件)。

XML Schema(XSD):更强大,用XML写。 示例片段:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="library">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="year" type="xs:integer"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

练习:用在线工具验证你的书籍XML是否符合简单DTD。

1.4 XPath查询#

XPath:XML的“查询语言”,选元素如CSS。

  • /library/book[1]/title:第一个书标题。
  • //author:所有作者。

示例(用浏览器DevTools或工具测试): 在XML中,XPath /library/book[@id='1']/title 返回 “Hello World”。

练习:写XPath选所有2023年书籍。

1.5 实用项目:产品目录XML#

整合知识:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog [
<!ELEMENT catalog (product+)>
<!ELEMENT product (name, price, description)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
<catalog>
<product id="p1">
<name>Laptop</name>
<price>999.99</price>
<description>High-performance laptop.</description>
</product>
<product id="p2">
<name>Mouse</name>
<price>29.99</price>
<description>Wireless mouse.</description>
</product>
</catalog>

扩展:添加XSD验证价格为正数。用XPath查询总产品数。

XML小结:适合复杂文档,但冗长。常见错误:未闭合标签、非法字符。


第二部分:从XML过渡到JSON#

XML和JSON都结构化数据,但JSON更简洁:

  • 相似:层次(XML元素 → JSON对象/数组)。
  • 不同
    • XML标签 → JSON键(字符串)。
    • 无属性/命名空间;纯键值。
    • JSON用{}对象、[]数组。
    • 验证:XML用DTD/XSD,JSON用Schema(JSON Schema)。

迁移提示

  • XML <book><title>Hi</title></book> → JSON {"book": {"title": "Hi"}}
  • 工具:在线转换器如XML to JSON

示例转换: XML:

<book><title>Hello</title><author>John</author></book>

JSON:

{
"book": {
"title": "Hello",
"author": "John"
}
}

验证JSON:用JSONLint


第三部分:JSON扩展(高级用法)#

JSON轻便,易解析。核心:对象(键值对)、数组、基本类型(string, number, boolean, null)。

3.1 基本结构与嵌套#

对象:

{
"name": "Alice",
"age": 30,
"hobbies": ["reading", "coding"]
}

嵌套:

{
"library": {
"books": [
{
"id": 1,
"title": "Hello World",
"author": {
"name": "John Doe",
"email": "john@example.com"
}
}
]
}
}

练习:创建用户配置文件JSON,含地址数组。

3.2 JSON Schema验证#

类似XML Schema:

{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer", "minimum": 0}
},
"required": ["name", "age"]
}

用在线工具验证JSON。

练习:为书籍JSON写Schema,要求year > 1900。

3.3 JSONPath查询#

JSON的XPath类似:

  • $.library.books[0].title:第一本书标题。
  • $..author.name:所有作者名。

示例:$.library.books[?(@.id == 1)].title 选ID=1的标题。

练习:用JSONPath Online Evaluator查询嵌套JSON。

3.4 编程集成(JavaScript/Python示例)#

JSON天生编程友好。

JavaScript(解析/生成):

// 解析
const jsonStr = '{"name": "Alice", "age": 30}';
const obj = JSON.parse(jsonStr);
console.log(obj.name); // Alice
// 生成
const newObj = {name: "Bob", age: 25};
const jsonStr2 = JSON.stringify(newObj, null, 2); // 美化
console.log(jsonStr2);

Python:

import json
# 解析
json_str = '{"name": "Alice", "age": 30}'
obj = json.loads(json_str)
print(obj['name']) # Alice
# 生成
new_obj = {'name': 'Bob', 'age': 25}
json_str2 = json.dumps(new_obj, indent=2)
print(json_str2)

练习:写JS脚本从JSON文件读数据,输出作者列表。

3.5 实用项目:API响应模拟#

模拟Web API JSON:

{
"status": "success",
"data": {
"users": [
{
"id": 1,
"name": "Alice",
"posts": [
{"title": "First Post", "likes": 10},
{"title": "Second Post", "likes": 5}
]
}
],
"total": 1
}
}

此文章由本人学习配置语言时的总结整理而来,由gork辅助优化格式。

xml和json的快速上手:初学者实用指南
https://windholm.dpdns.org/posts/itplace/
作者
Pars, gork
发布于
2025-11-12
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-12,距今已过 90 天

部分内容可能已过时

评论区

目录

封面
Loading ...
Loading ...
0:00 / 0:00