添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

JSON是什么

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据的存储和传输。它基于JavaScript语法,但已成为独立于编程语言的通用数据格式。

JSON使用简洁易读的文本格式表示数据,具有以下特点:

  1. 数据结构:JSON支持两种主要数据结构,即对象(Object)和数组(Array)。

    • 对象由键值对组成,每个键值对之间使用冒号(:)分隔,键值对之间使用逗号(,)分隔,并且整个对象包含在大括号({})中。
    • 数组由多个值组成,值之间使用逗号(,)分隔,并且整个数组包含在方括号([])中。
  2. 值类型:JSON支持多种值类型,包括字符串(String)、数字(Number)、布尔值(Bool)、空值(Null)、对象和数组。

  3. 字符串表示:JSON的字符串使用双引号("")表示,例如:"Hello, World!"。

  4. 嵌套结构:JSON允许通过将对象或数组作为值来创建复杂的嵌套结构。

下面是一个简单的JSON示例:

"name": "John Smith", "age": 30, "email": "[email protected]", "isStudent": false, "hobbies": ["reading", "traveling", "photography"], "address": { "street": "123 Main St", "city": "New York", "country": "USA"

这个json数据首先用{}来表示整个数据是一个对象,这个对象里面包括name,age,email,isStudent这些值,还包括了一个hobbies数组,以及一个address对象,这个对象还包括了一些street,city,country的值。

在QT中怎么操作JSON

在Qt中使用 QJsonValue(值类型),QJsoArray(数组类型),QJsonObject(对象类型),QjsonDocument(文档类型)。 这些类提供了处理JSON数据的基本工具。使用这些类的组合,可以解析、创建、修改和访问JSON数据。

QJsonValue(值类型):

QJsonValue是Qt中表示JSON值的类。它可以表示JSON的基本数据类型,如字符串、数字、布尔值,以及更复杂的数据结构,如对象和数组。QJsonValue具有以下常用函数:

  1. isNull() :检查QJsonValue是否为空。
  2. 1.isUndefined() :检查QJsonValue是否未定义。
  3. isBool() :检查QJsonValue是否是布尔值。
  4. isDouble() :检查QJsonValue是否是双精度浮点数。
  5. isString() :检查QJsonValue是否是字符串。
  6. isObject() :检查QJsonValue是否是对象。
  7. isArray() :检查QJsonValue是否是数组。
  8. toBool() :将QJsonValue转换为布尔值。
  9. toDouble() :将QJsonValue转换为双精度浮点数。
  10. toString() :将QJsonValue转换为字符串。
  11. toInt(): 将 QJsonValue转换为整型
    //构建对象,可以是bool,int,QString,char*,json对象,json数组
    //json值,double类型
    QJsonValue jsonValue(true);
    QJsonValue jsonValue1(1);
    QJsonValue jsonValue2(QString("string"));
    QJsonValue jsonValue3(1.11111);
    QJsonValue jsonValue4(QJsonObject({{"a",1}}));
    QJsonValue jsonValue5(jsonValue);
    //判断值的类型
    if(jsonValue.isBool()){
        qDebug()<<"是Bool类型";
    if(jsonValue4.isObject()){
        qDebug()<<"是json对象类型";
    if(jsonValue2.isString()){
        qDebug()<<"是String类型";
    //获取值
    qDebug()<<jsonValue.toBool();
    qDebug()<<jsonValue1.toInt();
    qDebug()<<jsonValue2.toString();
    qDebug()<<jsonValue3.toDouble();
    qDebug()<<jsonValue4.toObject().value("a").toInt();
    qDebug()<<jsonValue5.toBool();
    //获取值的类型
    qDebug()<<jsonValue1.type();

QJsonArray(数组类型):

QJsonArray (数组类型): QJsonArray是Qt中表示JSON数组的类。它可以包含多个QJsonValue对象,表示一组有序的JSON值。QJsonArray提供了以下常用函数:

  1. append() :将QJsonValue添加到数组末尾。
  2. insert(0: 在指定位置插入数据。
  3. at() :返回数组中给定索引处的QJsonValue。
  4. size() :返回数组的大小(元素数量)。
  5. isEmpty():判断数组是否为空。
    //构建对象
    QJsonArray jsonArray={"age",22,QString("Ryan")};
    QJsonValue value(2023);
    QJsonValue value1("日期");
    //在末尾添加数据
    jsonArray.append(value);
    //插入数据
    jsonArray.insert(0,value1);
    //获取指定位置的值
    qDebug()<<jsonArray.at(0).toString();
    //指向数组第一项
    qDebug()<<*jsonArray.begin();
    //判断数组是否为空
    if(!jsonArray.isEmpty()){
        qDebug()<<"数组不为空";
    //判断数组的大小
    qDebug()<<jsonArray.size();
    //输出全部键值对
    for(int i =0 ;i<jsonArray.size();i++){
        qDebug()<<jsonArray.at(i);

QJsonObject(对象类型):

        QJsonObject是Qt中表示JSON对象的类。它可以包含多个键值对,其中每个键都是字符串,对应的值是一个QJsonValue对象。QJsonObject提供了以下常用函数:

  1. insert():将键值对插入到对象中。
  2. remove():从对象中删除指定键的键值对。
  3. contains():检查对象是否包含指定的键。
  4. value():返回与给定键关联的QJsonValue。
  5. keys():返回对象中所有键的列表。
   //直接构建json对象
    QJsonObject jsonObj{{"A",1},{"B",2},{"C",3}};
    //返回指向json对象的第一项
    qDebug()<<jsonObj.begin().key();
    qDebug()<<jsonObj.begin().value().toInt();
    //指向寻找的键的那一项
    qDebug()<<jsonObj.constFind("A").key();
     qDebug()<<jsonObj.constFind("A").value().toInt();
    //判断json对象是否存在这个键
    if(jsonObj.contains("A")){
       qDebug()<<"存在";
    //返回json对象键值对的数量
    qDebug()<<jsonObj.count();
    qDebug()<<jsonObj.size();
    //删除某个键
    jsonObj.remove("A");
    if(!jsonObj.contains("A")){
       qDebug()<<"删除A成功";
    jsonObj.take("B");
    if(!jsonObj.contains("B")){
       qDebug()<<"删除B成功";
    //取得某个键的值
    qDebug()<<"C:"<<jsonObj.value("C").toInt();
    //插入数据
    jsonObj.insert("age",10);
    //遍历  输出数组所有数据
    for(auto it = jsonObj.begin();it!=jsonObj.end();it++){
        qDebug()<<it.key()<<it.value();

 QJsonDocument(文档类型):

        QJsonDocument是Qt中表示整个JSON文档的类。它可以将JSON数据解析为QJsonObject或QJsonArray,或将QJsonObject或QJsonArray转换为JSON字符串。QJsonDocument提供了以下常用函数:

  1. fromJson():将JSON字符串解析为QJsonDocument对象。
  2. toVariant():将QJsonDocument转换为QVariant对象。
  3. toJson():将QJsonDocument对象转换为JSON字符串。
  4. isObject():检查QJsonDocument是否表示JSON对象。
  5. isArray():检查QJsonDocument是否表示JSON数组。
    //构建对象
    QJsonDocument  jsonDocu(jsonObj);
    if(jsonDocu.isObject()){
        qDebug()<<"是对象";
    //以JSON格式输出对象的全部数据
    qDebug()<<jsonDocu.toJson();
    QJsonDocument  jsonDocu2(jsonArray);
    if(jsonDocu.isObject()){
        qDebug()<<"是数组";
    //以JSON格式输出数组的全部数据
    qDebug()<<jsonDocu2.toJson();

感谢阅读,下期更新json文档的解析!!!

一般来讲C++类和对象在java中是无法直接直接使用的,因为压根就不是一个规则。但是他们在内存中都是二进制表示的,所以把C++的类和对象转成二进制再按照java的规则解析这段二进制代码就可以做到C++描述的东西在java中复现了。 JSON是一种轻量级数据交换格式,常用于客户端和服务端的数据交互,不依赖于编程语言,在很多编程语言中都可以使用JSON,比如C,C++,Java,Android,QtJSON 有两种数据格式:JSON对象和JSON数组。小结:JSON数组里可以包含JSON对象或JSON数组,JSON对象里也可以嵌套JSON对象或JSON数组。示例2:嵌套JSON对象和JSON数组,JSON对象和JSON数组也要使用键值对格式。JSON数组的格式:[元素1,元素2,元素3,…示例2:元素可以是JSON对象或JSON数组。 00. 目录 文章目录00. 目录01. QJsonArray类简介02. QJsonArray成员方法03. QJsonArray成员方法解析04. 参考示例05. 附录 01. QJsonArray类简介 ​ QJsonArray封装了JSON数组。 ​ JSON数组是值的链表,可以插入和删除QJsonValue。 ​ QJsonArray与QVariantList可以相互转换。QJsonAr... 3、Json数组 Json数组使用[]表示,[]里面是元素,元素间使用 , 分隔,最后一个元素后面,没有 , 一个Json数组,支持多种不同的数据类型,包括:整形,浮点型,字符串,json数组,json对象,空值-null(null) Json数组中嵌套Json数组,父子关系 Json数组嵌套Js Qt解析Json协议时,Qt提供了QJsonDocument、QJsonObject、QJsonArray、QJsonValue接口解析Json协议。其中QJsonObject、QJsonArray是Json的两种数据格式,QJsonValue是统一的数据接口,包括整型、浮点型、字符串等常用数据类型。本文介绍四个Qt解析Json协议的接口,并详细介绍了接口的函数、用法,提供Json数据在Qt语言下的序列化、反序列化方式。 QJsonArray中的所有类型的操作,都需要统一为 QJsonValue 类型。在QT中,从文件中或从网络中读取的数据是 QJson的字符流,这种字符流则用QJsonDocument来表示。QJsonObject 封装了 Json 中的对象,在里边可以存储多个键值对.QJsonArray 封装了 Json 中的数组,在里边可以存储多个元素,Json中主要两种数据格式:Json数组,和Json 对象。toBinaryData()函数转化的效果;,不允许同时存储多个并列的根节点。在一个 Json 文件中。