JSON——“JavaScript Object Notation”——JS对象简谱
这是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
- JSON 与 JS 对象的关系:
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
如:
var obj = {a: 'Hello', b: 'World'}; //这是一个JS对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
~···
以上来源于:
https://baike.baidu.com/item/JSON/2462549?fr=aladdin
~···
- QJson写文件 两种方式
其一
QFile f(path);
if(!f.open(QIODevice::ReadWrite)) //打开文件,读写方式
return 0;
QJsonObject obj; //创建一个对象,输入key,value
obj.insert("name","zhangsan");
obj.insert("age","21");
obj.insert("place","nanjing");
obj.insert("time",QTime::currentTime().toString());
QJsonDocument document; //创建文件,设置对象
document.setObject(obj);
f.write(document.toJson()); //写入对象
f.close(); //关闭文件
这时候你会发现,输入的数据不按顺序的。如下图:

所以可以使用 其二 QJsonArray。用法如上相同
QFile f(path);
if(!f.open(QIODevice::ReadWrite))
return 0;
// QJsonObject obj;
// obj.insert("name","zhangsan");
// obj.insert("age","21");
// obj.insert("place","nanjing");
// obj.insert("time",QTime::currentTime().toString());
QJsonArray array;
array.append("zhangsan");
array.append(21);
array.append("nanjing");
array.append(QTime::currentTime().toString());
QJsonDocument document;
// document.setObject(obj);
document.setArray(array);
f.write(document.toJson());
f.close();
结果如下:
如果需要QJSonObject的顺序样式,可以使用array.append(obj);
实现
QJsonObject obj;
obj.insert("name","zhangsan");
obj.insert("age","21");
obj.insert("place","nanjing");
obj.insert("time",QTime::currentTime().toString());
QJsonArray array;
array.append(obj);
QJsonDocument document;
document.setArray(array);
file.write(document.toJson());
- 读文件 to QString
很简单
QFile f(path);
if(!f.open(QIODevice::ReadOnly)) //打开文件 只读方式
return 0;
QString str = f.readAll(); //读取全部
f.close(); //关闭文件
qDebug() << str;
- 读文件 to QVariantMap
QFile f(path);
if(!f.open(QIODevice::ReadOnly))
return 0;
QJsonParseError error; //定义一个错误返回值容器
QJsonDocument document = QJsonDocument::fromJson(f.readAll(),&error); //定义Json文件读取文件,并将错误返回给error
if(error.error != QJsonParseError::NoError) //判断是否有错
{
qDebug() << "write error!";
return 1;
}
if((document.isNull() || document.isEmpty()) && !document.isObject()) //判断documen是否可用
{
qDebug() << "document is none";
return 0;
}
QVariantMap map = document.toVariant().toMap(); //将QJsondocument转为QVariantMap型
QVariantMap::const_iterator aaa; //定义QVariantMap操作对象,遍历输出
for(aaa = map.constBegin(); aaa != map.constEnd(); aaa++)
qDebug() << aaa.key() << "---" << aaa.value();
aaa = map.find("time"); //寻找key值为time的数据
qDebug() << aaa.value().toString(); //将value的QVariant输出转为QString类型
f.close();
数据读取并显示如下: