使用QT工具,用QJsonObject保存JSON文件时,怎样避免自动排序? 100C

使用QT工具,用QJsonObject保存JSON文件,文件可以保存,但是发现内容会按字母顺序自动排序,而不是按原本的顺序,应如何修改才能避免自动排序?网上搜了很多都没有有效的修改方法。
示例代码:
void SaveJson()
{
//创建json对象
QJsonObject sub;
sub.insert("serial",QJsonValue(serial));
sub.insert("name",QJsonValue(name));
obj.insert("server",QJsonValue(sub));

//内存中的数据写到文件
  QJsonDocument doc(sub);

//将json对象转换成字符串
   QByteArray data=doc.toJson();
   QFile file("D:\\test1.json");
   file.open(QIODevice::WriteOnly);
   file.write(data);
   file.close();
}
如上面所说,运行结果输出的文件会自动把name项排序到前面,应怎样避免自动排序?

2个回答

redas2001
redas2001 这个没有实现避免自动排序呢,我按文章里的编译了,还是自动排序的结果
大约一个月之前 回复

不自动排序 只能看看保存文件的api有没有相关的参数

不过你可以实现 读取 展示的时候 按照原来的顺序展示。
实现思路就是 把json的key存储到有顺序的数组里。
读取的时候按照如下读取
从数组读出key 然后读JSON的值
key=arr[i];value=json[key]

因为没有楼主使用的类库下面的代码我使用HashMap举例
HashMap跟JSON是类似的。

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        String[] arr= {"天气情况","最高温度","风力情况"};
        map.put("天气情况", "11111");
        map.put("最高温度", "22222");
        map.put("风力情况", "33333");
        Set<String> set=map.keySet();
        System.out.println("----------下面的内容自动排序输出---------");
        for (String key : set) 
        {
            System.out.println(key+"--->"+map.get(key));
        }
        System.out.println("----------下面的内容按照123顺序输出---------");
        for(int i=0;i<arr.length;i++)
        {
            String key=arr[i];
            System.out.println(key+"--->"+map.get(key));
        }
    }
}

kingwolf_JavaScript
浴火_凤凰 回复redas2001: 我上面的回复新加了一个可以运行的Java代码 你可以看看 看输出 就明白我说的是什么意思了
26 天之前 回复
redas2001
redas2001 回复浴火_凤凰: 怎么遍历key数组呢?sub_test只是一个QJsonObject啊。
26 天之前 回复
kingwolf_JavaScript
浴火_凤凰 回复redas2001: 读取的时候 不要遍历json的key 遍历你那个key数组 然后取值,大概的伪代码像这样:sub_test[QString[i]] 这里的变量我使用的是你上一条回复我的代码里的变量
27 天之前 回复
kingwolf_JavaScript
浴火_凤凰 回复redas2001: 你可能对我说的有点误解了 我说的是就算保存是自动排序 但是读出来的时候 可以是原来的顺序
27 天之前 回复
redas2001
redas2001 这样输出的仍然是按字母顺序排序的{ "aaa": "xxx", "bbb": "xxx", "ccc": "xxx" }
27 天之前 回复
redas2001
redas2001 回复浴火_凤凰: 我写成 QJsonObject sub_test; QString key[3] = {"ccc","bbb","aaa"}; for (int i=0;i<3;i++) { sub_test.insert(key[i],QJsonValue(xxx)); }
27 天之前 回复
kingwolf_JavaScript
浴火_凤凰 回复redas2001: 你可能没看懂我的意思 不是json放数组 是json的key放在数组 取key的时候这样就是有顺序的
27 天之前 回复
redas2001
redas2001 现在就是放在数组里的,但是还是会自动排序。
27 天之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问