JSON、遍历获取json对象的值

本文介绍了JSON的基本使用方法,包括定义JSON对象、数组嵌套及对象嵌套等,并演示了如何通过遍历获取JSON对象中的各个元素值。

一、JSON基本入门在这里插入图片描述

二、定义JSON对象

建一个html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        //1.定义基本格式
        var person = {"name": "张三", age: 23, 'gender': true};

        //获取name的值
        //var name = person.name;
        var name = person["name"];
       // alert(name);

        //alert(person);
        //2.嵌套格式   {}———> []
        var persons = {
            "persons": [
                {"name": "张三", "age": 23, "gender": true},
                {"name": "李四", "age": 24, "gender": true},
                {"name": "王五", "age": 25, "gender": false}
                ]
        };
       // alert(persons);
        //获取王五值
        var name1 = persons.persons[2].name;
       // alert(name1);


        //2.嵌套格式   []———> {}
        var ps = [{"name": "张三", "age": 23, "gender": true},
            {"name": "李四", "age": 24, "gender": true},
            {"name": "王五", "age": 25, "gender": false}];
        //获取李四值
        //alert(ps);
        alert(ps[1].name);


    </script>

</head>
<body>

</body>
</html>

三、遍历获取json对象的值:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON遍历</title>
    <script>
        //定义json(基本格式),键可以+引号也可以不加
        var person={"name":"张三",age:23,"gender":true};

        //2.嵌套格式(数组里面有json对象)   []———> {}
        var ps=[{"name":"张三",age:23,"gender":true},
            {"name":"王五",age:24,"gender":true},
            {"name":"李四",age:25,"gender":false}];

        //3.嵌套格式(json对象里面有数组)   {}———> []
        var persons = {
            "p": [
                {"name": "张三2", "age": 23, "gender": true},
                {"name": "李四2", "age": 24, "gender": true},
                {"name": "王五2", "age": 25, "gender": false}
            ]};

        //1.获取person(基本格式)对象中所有的键和值
        //for in 循环,key是json对象的键,对象.键名这里遍历不管用,要对象[键]才行
        for (var key in person){
            //这样的方式获取不行。因为相当于  person."name"
            //alert(key + ":" + person.key);
            alert(key+":"+person[key]);
        }

        // 2.遍历数组里面的json(重点)
        //获取ps中的所有值,先遍历数组
        for(var i=0;i<ps.length;i++){
            //获取数组里面的每一个json对象
            var p=ps[i];
            for (var key in p){
                alert(key+":"+p[key]);
            }
        }

        // 3.遍历json里面的数组
        for (var key1 in persons){
            var json_value_array=persons[key1];
            for (var i=0;i<json_value_array.length;i++){
                //获取数组里面的每一个json对象
                var pi=json_value_array[i];
                for (var key2 in pi){
                    alert(key2+":"+pi[key2]);
                }
            }
        }

    </script>
</head>
<body>


</body>
</html>
在使用 nlohmann/json C++ 库时,遍历 JSON 对象中的子对象是一个常见的操作,尤其是在处理嵌套结构的数据时。以下是一种实现方式,结合了引用中提到的“返回一个指向该深度的 JSON 对象的引用”等技术[^3]。 假设你已经有一个 JSON 对象 `j`,其结构如下: ```json { "动物": { "人": { "年龄": 43, "电话": ["+123 12345678", "+321 87654321"] }, "狗": { "头": { "眼睛": 2, "耳朵": 2, "鼻子": 1 }, "腿": ["左前腿", "右前腿", "左后腿", "右后腿"] } } } ``` ### 遍历 JSON 对象的子对象 你可以使用递归函数来遍历 JSON 对象及其子对象。以下是一个示例实现: ```cpp #include <iostream> #include <nlohmann/json.hpp> using json = nlohmann::json; void traverseJson(const json& j, const std::string& indent = "") { if (j.is_object()) { for (auto& el : j.items()) { std::cout << indent << "\"" << el.key() << "\" isObject() 有 " << el.value().size() << " 个子对象\n"; traverseJson(el.value(), indent + " "); } } else if (j.is_array()) { std::cout << indent << "\"\" isArray() 有 " << j.size() << " 个子对象\n"; for (auto& el : j) { traverseJson(el, indent + " "); } } else if (j.is_string()) { std::cout << indent << "\"\" isString() \"" << j.get<std::string>() << "\"\n"; } else if (j.is_number()) { std::cout << indent << "\"\" isNumber() " << j.get<double>() << "\n"; } else if (j.is_boolean()) { std::cout << indent << "\"\" isBoolean() " << (j.get<bool>() ? "true" : "false") << "\n"; } else if (j.is_null()) { std::cout << indent << "\"\" isNull()\n"; } else { std::cout << indent << "\"\" 未知类型\n"; } } int main() { // 创建一个嵌套的 JSON 对象 json j; j["动物"]["人"]["年龄"] = 43; j["动物"]["人"]["电话"] = {"+123 12345678", "+321 87654321"}; j["动物"]["狗"]["头"]["眼睛"] = 2; j["动物"]["狗"]["头"]["耳朵"] = 2; j["动物"]["狗"]["头"]["鼻子"] = 1; j["动物"]["狗"]["腿"] = {"左前腿", "右前腿", "左后腿", "右后腿"}; // 遍历 JSON 对象 std::cout << "\"\" \"根\" isObject() 有 1 个子对象\n"; traverseJson(j); } ``` ### 输出示例 运行上述代码后,输出将类似于: ``` "" "根" isObject() 有 1 个子对象 "动物" isObject() 有 2 个子对象 "人" isObject() 有 2 个子对象 "年龄" isNumber() 43 "电话" isArray() 有 2 个子对象 "" isString() "+123 12345678" "" isString() "+321 87654321" "狗" isObject() 有 2 个子对象 "头" isObject() 有 3 个子对象 "眼睛" isNumber() 2 "耳朵" isNumber() 2 "鼻子" isNumber() 1 "腿" isArray() 有 4 个子对象 "" isString() "左前腿" "" isString() "右前腿" "" isString() "左后腿" "" isString() "右后腿" ``` ### 关键点 - **递归遍历**:使用递归函数可以处理任意深度的嵌套结构。 - **类型检查**:通过 `is_object()`, `is_array()`, `is_string()` 等方法判断 JSON 的类型。 - **缩进控制**:通过 `indent` 参数控制输出的缩进,使结构更清晰。 这种遍历方式非常适合用于调试、日志记录或解析复杂的 JSON 数据结构。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值