How to create/read/write JSON files in Qt5

后端 未结 3 1713
予麋鹿
予麋鹿 2020-12-02 07:18

Qt5 has a new JSON parser and I want to use it. The problem is that it isn\'t too clear about what the functions do in layman\'s terms and how to write code with it. That or

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-02 07:47

    Sadly, many JSON C++ libraries have APIs that are non trivial to use, while JSON was intended to be easy to use.

    So I tried jsoncpp from the gSOAP tools on the JSON doc shown in one of the answers above and this is the code generated with jsoncpp to construct a JSON object in C++ which is then written in JSON format to std::cout:

    value x(ctx);
    x["appDesc"]["description"] = "SomeDescription";
    x["appDesc"]["message"] = "SomeMessage";
    x["appName"]["description"] = "Home";
    x["appName"]["message"] = "Welcome";
    x["appName"]["imp"][0] = "awesome";
    x["appName"]["imp"][1] = "best";
    x["appName"]["imp"][2] = "good";
    std::cout << x << std::endl;
    

    and this is the code generated by jsoncpp to parse JSON from std::cin and extract its values (replace USE_VAL as needed):

    value x(ctx);
    std::cin >> x;
    if (x.soap->error)
      exit(EXIT_FAILURE); // error parsing JSON
    #define USE_VAL(path, val) std::cout << path << " = " << val << std::endl
    if (x.has("appDesc"))
    {
      if (x["appDesc"].has("description"))
        USE_VAL("$.appDesc.description", x["appDesc"]["description"]);
      if (x["appDesc"].has("message"))
        USE_VAL("$.appDesc.message", x["appDesc"]["message"]);
    }
    if (x.has("appName"))
    {
      if (x["appName"].has("description"))
        USE_VAL("$.appName.description", x["appName"]["description"]);
      if (x["appName"].has("message"))
        USE_VAL("$.appName.message", x["appName"]["message"]);
      if (x["appName"].has("imp"))
      {
        for (int i2 = 0; i2 < x["appName"]["imp"].size(); i2++)
          USE_VAL("$.appName.imp[]", x["appName"]["imp"][i2]);
      }
    }
    

    This code uses the JSON C++ API of gSOAP 2.8.28. I don't expect people to change libraries, but I think this comparison helps to put JSON C++ libraries in perspective.

提交回复
热议问题