用C++生成JSON文件

rkttyhzu  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(129)

我用C++编写了一段代码,使用JsonCpp库生成一个.json文件。我的问题是我很难维护文件中代码序列中出现的显示顺序。目前,显示顺序是字母顺序,与所需顺序不匹配。为了解决这个问题并保持所需的顺序,我想知道JsonCpp库中是否有一个解决方案,或者我应该考虑的替代方法或库?!

#include <iostream>
#include <fstream>
#include <jsoncpp/json/json.h>
#include <memory>

int main() {
    // Créer un objet Json::Value pour stocker les données
    Json::Value jsonData;

    // Enregistrement 1
    Json::Value enreg1;
    enreg1["CAT"] = "4";
    enreg1["Long"] = "19";
    enreg1["Day"] = "0";
    enreg1["Time"] = "13:15:37:86";
    enreg1["Fspec"] = "fa12gh";

    Json::Value Item1;
    Item1["AI"] = "1a";
    Item1["CC"] = "23";
    enreg1["Item1"] = Item1;

    // Ajouter Enreg_1 à l'objet JSON principal
    jsonData["Enreg_1"] = enreg1;

    // Ouvrir un fichier pour écrire le JSON
    std::ofstream file("do.json");

    if (file.is_open()) {
        // Utiliser un Writer de JsonCpp pour écrire l'objet JSON dans le fichier
        Json::StreamWriterBuilder builder;
        std::unique_ptr<Json::StreamWriter> jsonWriter(builder.newStreamWriter());

        // Écrire l'objet JSON dans le fichier
        jsonWriter->write(jsonData, &file);

        // Fermer le fichier
        file.close();
        std::cout << "Fichier JSON généré avec succès." << std::endl;
    } else {
        std::cerr << "Impossible d'ouvrir le fichier pour écrire." << std::endl;
        return 1;
    }

    return 0;
}

字符串
我希望这样:

{
    "Enreg_1" : 
    {
        "CAT" : "4",
        "Long" : "19",
        "Day" : "0",
                "Time" : "13:15:37:86",
        "Fspec" : "fa12gh",
        "Item1" : 
        {
            "AI" : "1a",
            "CC" : "23"
        }
    }
}


但我有这个代替(字母顺序):

{
    "Enreg_1" : 
    {
        "CAT" : "4",
        "Day" : "0",
        "Fspec" : "fa12gh",
        "Item1" : 
        {
            "AI" : "1a",
            "CC" : "23"
        },
        "Long" : "19",
        "Time" : "13:15:37:86"
    }
}

but5z9lq

but5z9lq1#

正如您的问题的评论者所指出的,JsonCPP使用std::map来存储其对象成员。如果你切换到nlohmann::json,你可以覆盖对象的后备存储以保持插入顺序。
甚至有一个预制类型供您用途:

using ordered_json = nlohmann::ordered_json;

字符串

相关问题