您的当前位置:首页正文

nlohmann解析一个json,某字段kk下有2个数组,每个数组内部都是ed,er,ert这3个字段,其中er字段中包含100个数组,每个数组是x,y,z三个字段,写一个程序,提取这200个x,y,

来源:九壹网

为了使用nlohmann/json库解析一个JSON对象,并从中提取特定字段的数据到std::vector中,你可以按照以下步骤进行。假设你的JSON数据如下所示:

 

【json】

 {

    "kk": [

        {

            "ed": "some_value1",

            "er": [

                {"x": 1, "y": 2, "z": 3},

                {"x": 4, "y": 5, "z": 6},

                // ... 还有其他98个对象

            ],

            "ert": "some_other_value1"

        },

        {

            "ed": "some_value2",

            "er": [

                {"x": 7, "y": 8, "z": 9},

                {"x": 10, "y": 11, "z": 12},

                // ... 还有其他98个对象

            ],

            "ert": "some_other_value2"

        }

    ]

}

 

你希望提取两个er数组中的所有x、y、z字段到一个std::vector中。下面是一个使用C++和nlohmann/json库的示例程序:

 

【cpp】

 #include <iostream>

#include <vector>

#include <nlohmann/json.hpp>

 

// 定义一个结构体来存储x, y, z的值

struct XYZ {

    int x;

    int y;

    int z;

};

 

int main() {

    // JSON数据字符串

    std::string json_data = R"({

        "kk": [

            {

                "ed": "some_value1",

                "er": [

                    {"x": 1, "y": 2, "z": 3},

                    {"x": 4, "y": 5, "z": 6},

                    // ... 省略了其他对象

                    {"x": 97, "y": 98, "z": 99},

                    {"x": 98, "y": 99, "z": 100}

                ],

                "ert": "some_other_value1"

            },

            {

                "ed": "some_value2",

                "er": [

                    {"x": 7, "y": 8, "z": 9},

                    {"x": 10, "y": 11, "z": 12},

                    // ... 省略了其他对象

                    {"x": 193, "y": 194, "z": 195},

                    {"x": 196, "y": 197, "z": 198}

                ],

                "ert": "some_other_value2"

            }

        ]

    })";

 

    // 解析JSON数据

    nlohmann::json json_obj = nlohmann::json::parse(json_data);

 

    // 创建一个vector来存储XYZ结构体

    std::vector<XYZ> xyz_values;

 

    // 遍历kk字段下的两个数组

    for (const auto& k_item : json_obj["kk"]) {

        // 遍历每个k_item下的er数组

        for (const auto& er_item : k_item["er"]) {

            // 提取x, y, z字段并添加到vector中

            XYZ xyz;

            xyz.x = er_item["x"];

            xyz.y = er_item["y"];

            xyz.z = er_item["z"];

            xyz_values.push_back(xyz);

        }

    }

 

    // 输出提取的x, y, z值以验证结果(可选)

    for (const auto& xyz : xyz_values) {

        std::cout << "x: " << xyz.x << ", y: " << xyz.y << ", z: " << xyz.z << std::endl;

    }

 

    return 0;

}

 

在这个程序中,我们首先定义了一个XYZ结构体来存储x、y、z的值。然后,我们解析了JSON数据,并遍历了kk字段下的两个数组以及每个数组内的er数组。对于每个er数组中的对象,我们提取了x、y、z字段的值,并将它们存储在一个std::vector<XYZ>中。最后,我们遍历了这个vector并输出了所有的x、y、z值以验证结果。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top