如何使用RapidJson读取和解析Json文件?
RapidJSON是一个高性能的C++ JSON库。它提供了一个快速且易于使用的界面用于解析和生成JSON。它小巧而完整,支持SAX和DOM方式的API。此外,它是自包含且仅有头文件的,不依赖于外部库,例如BOOST,甚至不依赖于STL。这里是使用RapidJSON解析JSON文件的示例。
示例1:
此示例将名称为 “test.json” 的文件的内容读入缓冲区,然后使用ParseStream函数解析JSON文档。解析的文档存储在 rapidjson :: Document 对象中,该对象提供对JSON文档中数据的访问。您可以使用 rapidjson :: Document 类的各种成员函数访问文档中的数据。例如,要访问对象成员,可以使用GetObject函数,要访问数组成员,则可以使用GetArray函数。您还可以使用HasMember函数检查对象是否具有特定成员,以及使用Size函数获取数组的大小。以下是更详细的使用RapidJSON解析JSON文件的示例,其中解释了每个步骤:
示例2:
示例 test.json:
输出:
示例解释:
在这个例子中,我们首先使用 fopen 函数打开 “test.json” 文件。然后,我们使用 rapidjson::FileReadStream 类将文件的内容读入缓冲区。解析 JSON 文档意味着将 JSON 格式化字符串转换为 JSON 对象,以便在程序中访问和操作。RapidJSON 提供了几个用于解析 JSON 的函数,包括:
- Parse:解析 JSON 字符串
- ParseInsitu:就地解析 JSON 字符串(即,不制作字符串的副本)
- ParseStream:从输入流解析 JSON 文档
一旦解析了 JSON 文档,您就可以使用 rapidjson::Document 类的各种成员函数访问文档中的数据。例如:
- IsObject:如果文档是对象,则返回true。
- IsArray:如果文档是数组,则返回true。
- IsString:如果文档是字符串,则返回true。
- IsNumber:如果文档是数字(整数或浮点数),则返回true。
- IsBool:如果文档是布尔值,则返回true。
- GetObject:返回文档中指定路径处的对象。
- GetArray:返回文档中指定路径处的数组。
- GetString:返回文档中指定路径处的字符串。
- GetInt:返回文档中指定路径处的整数。
- GetUint:返回文档中指定路径处的无符号整数。
- GetInt64:返回文档中指定路径处的64位整数。
- GetUint64:返回文档中指定路径处的64位无符号整数。
- GetDouble:返回文档中指定路径处的双精度浮点数。
- GetBool:返回文档中指定路径处的布尔值。
以下是使用这些函数访问JSON文档数据的例子:
示例3:
输出:
这段代码使用rapidjson::Document对象的Parse()方法解析字符串文本{“name”:”John”,”age”:30,”city”:”New York”}
中包含的JSON文档。然后访问文档并提取“name”、“age”和“city”成员的值并打印到控制台。