json解析

1. json的格式
  json数组:
[int, double, bool, string, json array, json object]
// C数组
int array[] = {2,3,4,5,6};
for(int i=0; i<sizeof(array)/sizeof(int); ++i)
{
int var = array[i];
}
// json数组也可以遍历
array[] = [12, 24.6, "hello", fasle, ["world", 34, true], {"name":"tom"}]
for(int i=0; i<len; ++i)
{
printf(array[i]);
}
  json对象:
  键值对:
key - string
value - int, double, bool, string, json array, json object
// 4个类
QJsonDocument
- 磁盘上有json格式的文件 -> 读到内存(字符串) -> json数组/json对象
- json数组/json对象 -> json文档对象 ->写入磁盘(写入的字符串)
QJsonArray - 解析json数组
QJsonObject - 解析json对象
QJsonValue - 将json支持的数据类型进行了封装, 得到一个QJsonValue
{
"name":"zhang3",
"age":24,
"sex":"man",
"family":["father", "mother", "sister"],
"family1":{
"father":"zhang2",
"mother":"小红",
"sister":"小小红"
}
}
3. 例子: 在内存中组织一个json对象, 将其写入磁盘文件中
步骤:
1. 创建一个空的json对象
QJsonObject::QJsonObject()
2. 给json对象添加键值对
iterator QJsonObject::insert(const QString &key, const QJsonValue &value)
3. 将QJsonObject 转换为 QJsonDocument
QJsonDocument::QJsonDocument(const QJsonObject &object)
4. 通过QJsonDocument对象得到一个字符串
QByteArray QJsonDocument::toBinaryData() - 得到二进制格式字符串
QByteArray QJsonDocument::toJson(JsonFormat f = Indented) const - 得到文本字符串
5. 通过文件操作将字符串写入磁盘
QFile -> write
 
4. 例子: 将其写入磁盘json文件中 -> 读到内存
1. 通过QFile -> read操作, 得到一个字符串(文件内容)
2. 将得到的字符串 -> QJsonDocument
QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError
*error = Q_NULLPTR) - static
QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation
validation = Validate) - static
3. 根据实际情况将 QJsonDocument -> json数组/对象
QJsonArray QJsonDocument::array() const
QJsonObject QJsonDocument::object() const
4. 通过json数组/对象的API取值
json数组取值
QJsonValue QJsonArray::at(int i) const
QJsonValue QJsonArray::operator const
json对象取值
QJsonValue QJsonObject::value(const QString &key) const
 
2. Qt中的文件操作
 
// 创建能够操作文件的对象
QFile::QFile() - 空对象, 没有指定操作的文件
- 通过: void QFile::setFileName(const QString &name)设置操作的文件
QFile::QFile(const QString &name) - 创建对象, 并指定了要操作的文件
QFile::QFile(const QString &name, QObject *parent)
// 打开文件
bool QFile::open(OpenMode mode)
参数mode:
- QIODevice::ReadOnly
- QIODevice::WriteOnly
- QIODevice::ReadWrite
- QIODevice::Append
- QIODevice::Truncate
返回值:
- 成功: grue
- 失败: false
// 读文件
qint64 QIODevice::read(char *data, qint64 maxSize);
QByteArray QIODevice::read(qint64 maxSize);
QByteArray QIODevice::readAll();
qint64 QIODevice::readLine(char *data, qint64 maxSize);
QByteArray QIODevice::readLine(qint64 maxSize = 0)
bool QIODevice::atEnd() const;
while(!file.atEnd())
{
QByteArray line = file.readLine();
}
// 写文件
qint64 QIODevice::write(const char *data, qint64 maxSize);
qint64 QIODevice::write(const char *data);
qint64 QIODevice::write(const QByteArray &byteArray)
// 关闭文件对象
void QIODevice::close()
 
 
 
 
 
posted @   咖喱给给啊  阅读(88)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示