• 初识Json


     json是一种轻量级数据交换格式。json完全独立于语言的文本格式,但是使用了类似于C语言的的家族习惯。

    常用的json库:
    • JsonCpp:一个用c++处理josn的开发包:
    • cJson
    一个超轻巧,携带方便,单文件,简单的可作为ANSI-C标准的Json解析器
    • QJson
    QJson是Qt自带的开发包,可以将JSon数据解析为QVariant对象,JSon的数组将被映射为QVariantList实例,而其他对象映射为QVaraintMap实例。

    下面是一个Json文档例子
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
      "encoding" : "UTF-8",
      "plug-ins" : [
          "python",
          "c++",
          "ruby"
          ],
      "indent" : { "length" : 3, "use_space" : true }
    }

    JSon文档实际上就是一个javaScript对象,也成Jon对象,以大括号作为起止符。其实质是不排序的键值对,其中键要求是string类型,值可以是任意类型。

    比如上面的json对象中,键encoding的值是UTF-8,plug-ins的值是一个数组,在Json中数组以中括号表示,这个数组是一个字符串列表,分别有"python","c++", "ruby"三个对象;键indent的值是一个对象,这个对象有两个属性,lenth=3,use_space=true;

    接下来,我们使用QJon解析上述json文本:

    1. QJson::Parser parser;
    2. bool ok;
    3. QString json("{"
    4. ""encoding" : "UTF-8","
    5. ""plug-ins" : ["
    6. ""python","
    7. ""c++","
    8. ""ruby""
    9. "],"
    10. ""indent" : { "length" : 3, "use_space" : true }"
    11. "}");
    12. QVariantMap result = parser.parse(json.toUtf8(), &ok).toMap();
    13. if (!ok) {
    14. qFatal("An error occurred during parsing");
    15. exit (1);
    16. }
    17. qDebug() << "encoding:" << result["encoding"].toString();
    18. qDebug() << "plugins:";
    19. foreach (QVariant plugin, result["plug-ins"].toList()) {
    20. qDebug() << " -" << plugin.toString();
    21. }
    22. QVariantMap nestedMap = result["indent"].toMap();
    23. qDebug() << "length:" << nestedMap["length"].toInt();
    24. qDebug() << "use_space:" << nestedMap["use_space"].toBool();
    生成JSon对象
    如果需要将QVariant生成 JSON 对象,我们则使用QJson::Serializer对象

    1. QVariantList people;
    2. QVariantMap bob;
    3. bob.insert("Name", "Bob");
    4. bob.insert("Phonenumber", 123);
    5. QVariantMap alice;
    6. alice.insert("Name", "Alice");
    7. alice.insert("Phonenumber", 321);
    8. people << bob << alice;
    9. QJson::Serializer serializer;
    10. bool ok;
    11. QByteArray json = serializer.serialize(people, &ok);
    12. if (ok) {
    13. qDebug() << json;
    14. } else {
    15. qCritical() << "Something went wrong:" << serializer.errorMessage();
    16. }
    补充

    上面是 QJson 的主要使用方法。其实 QJson 还提供了另外一个类QObjectHelper,用于QVariantQObject之间的转换。注意我们上面所说的 QJson 的转换需要的是QVariant类型的数据,无论是转换到 JSON 还是从 JSON 转换而来。但是通常我们在应用程序中使用的是QObject及其子类。QObjectHelper提供了一个工具函数,完成QVariantQObject之间的转换。例如我们有下面的类:

    那么,我们可以使用下面的代码将Person类进行 JSON 序列化:

    以及:






  • 相关阅读:
    页面检测网络外网连接- 网页基础模块(JavaScript)
    sql server替换字段中的某个字符
    关于Linux下 fork() 函数的总结
    郁闷的一天
    关于 Linux 下的线程函数未定义问题
    英文书籍
    学会阅读外文资料
    内存池设计(五)
    内存池设计(四)
    内存池设计(三)
  • 原文地址:https://www.cnblogs.com/chengkeke/p/5417392.html
Copyright © 2020-2023  润新知