json数组及用法

//json文件代码

{

"mane":"中国",
"provinces":
[
{
"proName":"贵州",
"cities":["贵阳","六盘水","遵义","铜仁","兴义","毕节","安顺","凯里","都匀"]
},
{
"proName":"河南",
"cities":["郑州","开封","洛阳","平顶山","安阳","鹤壁","新乡","焦作"]
},
{
"proName":"北京",
"cities":["东城区","西城区","朝阳区","丰台区","石景区","海淀区","顺义区"]
}
]
}


//HTML文件代码

<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $(function(){
                $.getJSON("json.json",function(data){
                    //生成省级菜单项
                    tempP="";
                    for(eachP in data.provinces)
                    {
                        tempP+="<option value='"+data.provinces[eachP].proName+"'>"+data.provinces[eachP].proName+"</option>";
                    }
                    $("#provinces").html(tempP);
                    
                    
                    //省级菜单生成后,立即调用生成城市菜单的函数getCities()生成第一个省份对应的城市菜单,及默认省对应的城市菜单
                    getCities($("#provinces").val());
                    
                    
                    //为省级菜单绑定change事件,当选定值发生改变时调用getCities()函数,生成所选省对应的城市菜单
                    $("#provinces").change(function(){
                        curP=$(this).val();
                        getCities(curP)
                        })
                    
                    
                    //getCities()函数根据省名筛选出对应的城市菜单
                    function getCities(proName)
                    {
                        for (eachP in data.provinces)
                        {
                            if(data.provinces[eachP].proName==proName)
                            {
                                tempC="";
                                for (eachC in data.provinces[eachP].cities)
                                {
                                    tempC+="<option value='"+data.provinces[eachP].cities[eachC]+"'>"+data.provinces[eachP].cities[eachC]+"</option>";
                                }
                                $("#cities").html(tempC);
                            }
                        }
                    }
                    
                })
            })
        </script>
    </head>
    <body>
        省<select id="provinces">
            <option>正在加载</option>
        </select>
        市<select id="cities"><option>正在等待</option></select>
    </body>
</html>

### 创建和初始化 JSON 数组 在 `nlohmann::json` 中,可以通过多种方式创建 JSON 数组。最简单的方法是使用直接赋值或者构造函数来初始化一个空数组: ```cpp #include <iostream> #include <nlohmann/json.hpp> using json = nlohmann::json; int main() { // 创建一个空数组 json arr1 = json::array(); // 直接初始化数组 json arr2 = {"apple", "banana", "cherry"}; std::cout << arr1 << std::endl; // 输出: [] std::cout << arr2 << std::endl; // 输出: ["apple","banana","cherry"] } ``` 上述代码展示了如何创建并输出一个简单的 JSON 数组[^3]。 --- ### 访问 JSON 数组元素 可以使用标准的数组访问语法来获取 JSON 数组中的元素: ```cpp // 访问数组元素 std::cout << "第二个元素: " << arr2[1] << std::endl; // 输出: banana ``` 此外,还可以使用迭代器来遍历数组中的所有元素: ```cpp // 使用迭代器遍历数组 for (const auto& item : arr2) { std::cout << item << std::endl; } ``` 这些方法适用于对数组进行动态处理或提取特定数据[^1]。 --- ### 修改 JSON 数组内容 可以向数组中添加新元素、删除已有元素或更新现有元素: ```cpp // 添加元素 arr2.push_back("date"); // 删除最后一个元素 arr2.pop_back(); // 更新指定索引位置的元素 arr2[0] = "apricot"; ``` 这些操作使得 JSON 数组能够灵活地适应数据变化的需求[^2]。 --- ### 嵌套数组与对象 JSON 数组不仅可以包含基本类型,还可以嵌套其他数组或对象: ```cpp // 创建嵌套数组和对象 json nested_arr = { "fruit", {"red", "green"}, {"name": "Tom", "age": 30} }; std::cout << nested_arr.dump(4) << std::endl; ``` 此示例演示了如何构建复杂的结构,并通过 `dump` 方法格式化输出结果[^2]。 --- ### 序列化与反序列化 JSON 数组 可以将 JSON 数组转换为字符串以便存储或传输,并从字符串中解析回 JSON 对象: ```cpp // 序列化数组为字符串 std::string str = arr2.dump(); std::cout << "序列化后的字符串: " << str << std::endl; // 反序列化字符串为 JSON 数组 std::string json_str = "[\"orange\", \"lemon\"]"; json parsed_arr = json::parse(json_str); std::cout << "反序列化后的数组: " << parsed_arr << std::endl; ``` 这种能力对于网络通信或持久化存储非常有用[^1]。 --- ### 异常处理 在处理 JSON 数组时,可能会遇到无效的输入或其他错误。为此,库提供了异常处理机制: ```cpp try { // 尝试解析无效的 JSON 字符串 json invalid_arr = json::parse("[invalid]"); } catch (const json::parse_error& e) { std::cerr << "解析错误: " << e.what() << std::endl; } ``` 通过捕获特定类型的异常,可以编写健壮的错误恢复逻辑[^1]。 --- ### 示例:处理复杂数组结构 以下是一个更复杂的例子,展示如何构建和操作包含嵌套结构的 JSON 数组: ```cpp json complex_data; complex_data["users"] = { {{"id", 1}, {"name", "Alice"}}, {{"id", 2}, {"name", "Bob"}} }; // 遍历用户列表 for (const auto& user : complex_data["users"]) { std::cout << "ID: " << user["id"] << ", Name: " << user["name"] << std::endl; } // 删除特定用户 complex_data["users"].erase(complex_data["users"].begin() + 1); // 删除 Bob ``` 该示例模拟了从数据集合中管理用户信息的过程,展示了如何高效地遍历和修改嵌套数据[^2]。 --- ### 总结 `nlohmann::json` 提供了丰富的功能来处理 JSON 数组,包括创建、访问、修改以及序列化/反序列化等操作。它不仅支持基本的数据类型,还允许嵌套复杂的结构,从而满足各种应用场景的需求。通过适当的异常处理,确保了程序在面对错误输入时的安全性。这些特性使 `nlohmann::json` 成为 C++ 开发者处理 JSON 数据的理想选择。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值