专栏首页acoolgiser_zhuanlanQT QJsonObject 与 QJsonArray 中insert()方法 插入值的顺序问题

QT QJsonObject 与 QJsonArray 中insert()方法 插入值的顺序问题

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/acoolgiser/article/details/99442177

首先看一下这两个接口的定义:

  • QJsonArray Class

The QJsonArray class encapsulates a JSON array. More...

Header:

#include <QJsonArray>

qmake:

QT += core

Since:

Qt 5.0

  • insert方法的官方定义:

void QJsonArray::insert(int i, const QJsonValue &value) Inserts value at index position i in the array. If i is 0, the value is prepended to the array. If i is size(), the value is appended to the array. See also append(), prepend(), replace(), and removeAt(). iterator QJsonArray::insert(iterator before, const QJsonValue &value) Inserts value before the position pointed to by before, and returns an iterator pointing to the newly inserted item. See also erase() and insert().

  • QJsonObject Class

The QJsonObject class encapsulates a JSON object. More...

Header:

#include <QJsonObject>

qmake:

QT += core

Since:

Qt 5.0

  • insert方法的官方定义:

iterator QJsonObject::insert(const QString &key, const QJsonValue &value) Inserts a new item with the key key and a value of value. If there is already an item with the key key, then that item's value is replaced with value. Returns an iterator pointing to the inserted item. If the value is QJsonValue::Undefined, it will cause the key to get removed from the object. The returned iterator will then point to end(). See also remove(), take(), QJsonObject::iterator, and end().

两个接口的对象中各自insert插入方法的区别:

在jsonObject中插入键值对的顺序和文件中的键值对顺序不太一样(顺序相反),这是因为JSON中的object本身是指无序的键值对,它不能确保我们插入的顺序和实际保存的数据顺序一致。如果你的数据需要顺序一致,考虑JSON中的array,array是值的有序列表。

插入值的代码:

// 构建 JSON 对象
QJsonObject json;
json.insert("Name", "Qt");
json.insert("From", 1991);
json.insert("Cross Platform", true);

结果:(顺序相反)

{
    "Cross Platform": true,
    "From": 1991,
    "Name": "Qt"
}

解决办法:可以逆序调用insert方法插入值;或者用QJsonArray接口。

而在jsonArray中插入值的顺序与文件中的顺序是一致的,本身就是数组,自带下标(索引)。

插入值的代码:

// 构建 Json 数组 - Version
QJsonArray versionArray;
versionArray.append(4.8);
versionArray.append(5.2);
versionArray.append(5.7);

结果:(顺序一致)

"Version": [
        4.8,
        5.2,
        5.7
    ]

参考学习:

https://blog.csdn.net/m0_37194132/article/details/85085584

https://yq.aliyun.com/articles/119861

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • node.js 读取文件目录下的所有文件,JS读取文件目录

    acoolgiser
  • MFC编程入门之五(MFC消息映射机制概述)

    在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。 比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息...

    acoolgiser
  • Qt之JSON生成与解析

    原文链接:https://yq.aliyun.com/articles/119861

    acoolgiser
  • memcached数据库环境部署及应用

    前言: 三大传统数据库:mysql,sqlserver,oracle 【sql数据库-存硬盘-慢】 新兴数据库:mogodb,memcached,redis ...

    吴柯
  • JDK源码分析-CyclicBarrier

    CyclicBarrier 是并发包中的一个工具类,它的典型应用场景为:几个线程执行完任务后,执行另一个线程(回调函数,可选),然后继续下一轮,如此往复。

    WriteOnRead
  • 用于人工代码生成的AI研究环境(元编程)

    https://github.com/gsurma/meta_intelligence

    代码医生工作室
  • 高并发编程系列(一)

    放在静态方法上面,由于静态没有this可以锁定,不需要new 出对象,运用了反射.

    掌上编程
  • 高并发编程系列

    放在静态方法上面,由于静态没有this可以锁定,不需要new 出对象,运用了反射.

    掌上编程
  • LearnPython - Zip格式文

    用户2398817
  • 2018-08-15python通过蓝牙接megpi主板

    Equipment Class: DXX - Part 15 Low Power Communication Device Transmitter

    用户1733354

扫码关注云+社区

领取腾讯云代金券