当前位置: 首页 > article >正文

开发小技巧分享 01:JSON解析工具

1.百度词条

        JSON(JavaScript Object Notation,JavaScript对象表示法)是基于ECMAScript的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON独立于语言设计,很多编程语言都支持JSON格式的数据交换。JSON是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的Web应用程序的数据交换。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。其文件通常使用扩展名.json。

2.简述应用场景

        对于开发者而言,我们经常会遇到各种各样的配置文件,很多时候开发人员喜欢用较为轻便的json来存储相关的配置信息。

        json 是通过键值对的方式来存储需要的基本信息:

        便捷之处在于:多个键值对可以组成一组对象,多个对象可以组成一组对象数组

        键值对可以区别为    键值名称 和 键值

        键值名称: 字符串

        键值:数字、字符串、对象、数组、对象数组、复合对象,

        用json保存的数据看起来会比较简介明了,如图所示:

{                                                    #  一个复合对象
  "person": {                                        #  一个复合对象
    "name": "John",                                  #  一个字符串对象
    "age": 30,                                       #  一个数字对象
    "address": {                                     #  一个复合对象
      "street": "123 Main St",                       #  一个字符串对象
      "city": "New York",                            #  一个字符串对象
      "state": "NY",                                 #  一个字符串对象
      "zipcode": "10001"                             #  一个字符串对象
    },                       
    "phone_numbers": [                               #  一个对象数组
      {                                              #  一个复合对象
        "type": "home",                              #  一个字符串对象
        "number": "555-1234"                         #  一个字符串对象
      },                 
      {                                              #  一个复合对象
        "type": "work",                              #  一个字符串对象
        "number": "555-5678"                         #  一个字符串对象
      }
    ]
    "favorite": ["reading","swimming","cycling"],    #  一个数组对象
  }
}
 3.json解析工具

        这里我们用到nlohmann/json库:https://github.com/nlohmann/json

4.代码简例

        以下代码简要的给出了解析代码,包含:

                解析字符串、

                解析数字、

                解析对象下的各个元素、

                解析对象数组

#include <nlohmann/json.hpp>
#include <iostream>
#include <fstream>

using json = nlohmann::json;

int main() {
    //加载json文件
    json j;
	ifstream jfile("test.json");
	if (!jfile) return -1;
	jfile >> j;
    jfile.close();

    // 访问 JSON 对象
                                      
    json person = j["person"];                //访问 person 对象
                  
    string name = person["name"];             //访问 person 下的 name 键值 (字符串)     
    cout << "name : "<< name << endl;
    int age = person["age"];                  //访问 person 下的 age 键值 (数字)
    cout << "age : "<< age << endl;                 

    json address = person["address"];         //访问 address 对象        

    string street = address["street"];        //访问 address 下的 street 对象 (字符串)
    cout << "street : "<< street << endl;           

    string city = address["city"];            //访问 address 下的 city 对象 (字符串)
    cout << "city : "<< city << endl;                

    string state = address["state"];          //访问 address 下的 state 对象 (字符串)
    cout << "state : "<< state << endl;              

    string zipcode = address["zipcode"];      //访问 address 下的 zipcode 对象 (字符串)
    cout << "zipcode : "<< zipcode <<endl;        

    for(auto phone: person["phone_numbers"]) //访问 person 下的 phone_numbers 对象 (对象数组)
    {

    string type = phone["type"];          //访问 phone_numbers 下的每个 type 对象 (字符串)
    cout << "type : "<< type << endl;            

    string number = phone["number"];          //访问 phone_numbers 下的每个 number 对象 (字符串)
    cout << "number : "<< number <<endl;          
    }

    cout << "favorites : " ;  
    for(auto favorite: person["favorites"])   //访问 person 下的 favorites 对象 (数组)
    {
    cout << favorite << "  ";                   
    }       
    cout << endl;

}


http://www.kler.cn/a/469120.html

相关文章:

  • 进程间通讯
  • C# 服务生命周期:Singleton、Scoped、Transient
  • web实操9——session
  • 神经网络第一课
  • C# 设计模式(行为型模式):责任链模式
  • HashMap总结使用+原理+面试
  • 入手51单片机的学习路径
  • Linux中的tcpdump抓包命令详解:抓取TCP和UDP数据包并按小时输出文件
  • 【MyBatis-Plus 进阶功能】开发中常用场景剖析
  • C++之STL
  • DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?
  • 数据库工程师进阶秘籍:云计算基础知识题目精选与答案(附PDF)
  • QT-------------对话框和多窗口程序设计
  • 《嵌入式系统:科技与艺术的交响曲》
  • Spark是什么?Flink和Spark区别
  • 【AI数学基础】线性代数:矩阵和线性变换
  • JVM之Java内存模型
  • c# 服务中启动exe窗体程序
  • 家用万兆网络实践:紧凑型家用服务器静音化改造(二)
  • Coroutine 基础四 —— CoroutineScope 与 CoroutineContext
  • Java `computeIfAbsent` 方法
  • Flink源码解析之:Flink on k8s 客户端提交任务源码分析
  • 7. C语言 运算符详解
  • 【计算机网络安全】CA和安全电子邮件
  • 【前端面试题】前端中的两个外边距bug以及什么是BFC
  • Linux驱动开发:深入理解I2C时序(二)