zoukankan      html  css  js  c++  java
  • 初识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 序列化:

    以及:






  • 相关阅读:
    剑指offer-整数中1出现的次数
    数据流中的中位数
    二叉搜索树的后序遍历序列
    Java 线程阻塞和唤醒
    Java 线程池
    Python哈希表和解析式
    Python线性数据结构
    python 基础知识
    pyenv虚拟环境管理python多版本和软件库
    Paramiko的SSH和SFTP使用
  • 原文地址:https://www.cnblogs.com/chengkeke/p/5417392.html
Copyright © 2011-2022 走看看