C、C++中对json格式数据的解析和封装

2023-11-13

C:首先需要调库:#include <cJSON.h>

Json的数据结构介绍:
/* The cJSON structure: */
typedef struct cJSON
{
/*next/prev允许您遍历数组/对象链。或者,使用GetArraySize/GetArrayItem/GetObjectItem */
struct cJSON *next;
struct cJSON *prev;
/* 数组或对象项将有一个子指针指向数组/对象中的项链。 */
struct cJSON *child;

/* 项目的类型,如上所述。*/
int type;

/* 字符串, if type==cJSON_String */
char *valuestring;
/* 数值, if type==cJSON_Number */
int valueint;
/* 小数数据, if type==cJSON_Number */
double valuedouble;

/* 项的名称字符串,如果此项是的子项,或在对象的子项列表中。*/
char *string;
} cJSON;
Json格式文本解析:
#define TEST2 "{\n\"auth\": \"auc_d0dd49997dd17b12f76b74fe51d0de3fd772718b\",\n\"sessionId\": \"5129110798518519880764729435382\"\n}"
char* buffer = TEST2;
cJSON* json = cJSON_Parse(buffer);
cJSON* name = cJSON_GetObjectItem(json, "name");
cJSON* num = cJSON_GetObjectItem(json, "num");
printf("%s,%s",name->valuestring,num->valueint);


假设文本为:需要解析中间的pinyin,textContent,title
"Data":
    {
        "listItems":
				[
					{
						"htmlView":"http://hanyu.baidu.com/s?wd=一飞冲天&ptype=zici",
						"mediaId":"6f7af22ba4613b869f455d569c204c69",
						"selfData":"{\"interpretation\":\"鸟儿展翅一飞,直冲云霄。比喻平时没有特殊表现,一下做出了惊人的成绩。\",\"lemma\":\"一飞冲天\",\"pinyin\":\"[yī fēi chōng tiān]\"}\n",
						"textContent":"鸟儿展翅一飞,直冲云霄。比喻平时没有特殊表现,一下做出了惊人的成绩。",
						"title":"一飞冲天"
					}
				]
    }

cJSON* Data = cJSON_GetObjectItem(json, "Data");
cJSON* ListItems = cJSON_GetObjectItem(Data, "listItems");
cJSON* Json_Array = cJSON_GetArrayItem(ListItems, 0);//其中[]里面为数组需要用cJSON_GetArrayItem,0代表第一个。
cJSON* TextContent = cJSON_GetObjectItem(Json_Array, "textContent");
cJSON* Title = cJSON_GetObjectItem(Json_Array, "title");
cJSON* SelfData = cJSON_GetObjectItem(Json_Array, "selfData");
cJSON* Src = cJSON_Parse(SelfData->valuestring);//selfData数据解析出来为字符串,需要再次解析为json数据才能再次解析
cJSON* Pinyin = cJSON_GetObjectItem(Src, "pinyin");
Json格式文本封装:将多条字符串合成一条json格式数据
const char* client_id = "12345678";
const char* sessionid = "abcdefg";
cJSON *root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "authCode", client_id);
cJSON_AddStringToObject(root, "sessionId", sessionid);//这里的添加处理字符串以外还可以添加很多类型的数据
char *auth_resp_info = cJSON_Print(root);
printf("%s,%s",auth_resp_info);

C++: 

json json_data;
json_data["Header"] = {{"DSN","5ca439320d7b4adfb965a4442c791c33"}};
json_data["Payload"] = {{"blobData",{{"longitude",""},{"latitude",""}}},{"domain","weather"},{"intent","GetGeneralMsgRequest"}};

最后形成:
 JSON string: {
     "Header": {
         "DSN": "5ca439320d7b4adfb965a4442c791c33"
     },
     "Payload": {
         "blobData": {
             "latitude": "",
             "longitude": ""
         },
         "domain": "weather",
         "intent": "GetGeneralMsgRequest"
     }
 }

或者可以这样:也可以形成上面的数据
json j2 = R"(
 "Header": {
         "DSN": "5ca439320d7b4adfb965a4442c791c33"
     },
     "Payload": {
         "blobData": {
             "latitude": "",
             "longitude": ""
         },
         "domain": "weather",
         "intent": "GetGeneralMsgRequest"
     }
)"_json;
要想打印上面封装的json的数据可以用以字符串的形式:
 json_data.dump(4)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C、C++中对json格式数据的解析和封装 的相关文章

  • 使用 REST 协议和 JSON 数据格式测试 Web 服务的最佳工具是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是使用 JSON 数据格式测试 REST Web 服务的新手 我尝试了SOUPUI 但不幸的是不支持
  • 使用 JSONDecoder 解码的对象的打印输出出现问题

    我正在尝试快速解码 JSON 字符串 但在解码后访问属性时遇到一些奇怪的问题 这是我从本地存储的 JSON 文件检索的 JSON 文件的内容 word a usage partOfSpeech determiner 这是访问 JSON 文件
  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • go json marshal 的默认大小写选项?

    我有以下结构要导出为 json type ExportedIncident struct Title string json title Host string json host Status string json status Dat
  • 如何在 Flutter 中解码 Gzip Http 响应?

    我是颤振新手 我正在发出网络请求 并且得到了正确的响应 但数据已被压缩 我已经在 Swift 中解压了相同的内容 但是对于 Flutter 我无法做到这一点 有人可以帮忙吗 这是我尝试过的 import dart convert impor
  • PagedList 的 Newtonsoft.Json 序列化不包含某些属性

    我正在尝试序列化 PagedList 对象 https github com martijnboland MvcPaging blob master src MvcPaging PagedList cs https github com m
  • 从 JSON 字符串创建 BSON 对象

    我有一个 Java 应用程序 它从外部应用程序获取数据 传入的 JSON 位于字符串中 我想解析该字符串并创建 BSON 对象 不幸的是 我在 Java 的 BSON 实现中找不到该 API 我是否需要使用外部解析器 例如 GSON 而且
  • 从 React.js 中的 json 文件获取数据

    我有一个 json 文件调用 data json 例如 我使用 React js id 1 title Child Bride id 2 title Last Time I Committed Suicide The id 3 title
  • 从 JSONPath 中的过滤表达式中选取第 N 个项目

    我一直在尝试使用 JSONPath 过滤 JSON 中的特定元素 然后仅选择返回的结果数组中的第一项 我的基本 JSONPath 看起来像这样 store book category fiction price 我想添加这个 0 像这样过滤
  • 如何解码这个 JSON 字符串?

    这是我从 feed finder url 中得到的字符串 JSON 编码 updated 1265787927 id http www google com reader api 0 feed finder q u003dhttp itca
  • 将 Php 数组编码为 json [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想对我的 php 数组进行编码 A
  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • 检索 Steam 市场上物品的价格历史记录

    关于 Steam 市场上的物品 我想知道是否有办法检索某物品在一段时间内的价格历史记录 我知道 Steam 为想要将市场特定数据集成到自己网站中的开发人员提供了一个特殊的 api 但我还没有找到任何有关以 json 形式检索商品价格历史记录
  • Bug 组合:jQuery 1.4、ajax/json、Firebug Lite 和 IE 8

    我刚刚得出结论 无论我如何尝试 jQuery 的 ajax 调用都无法在 IE 8 中处理 JSON 数据 我发现我可以使用 jQuery 1 3 2 库 这解决了问题 但 1 4 根本无法处理 JSON ajax 请求 即使返回的 JSO
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 如何绕过 CF8 编码不可打印字符中的 SerializeJSON?

    SerializeJSON 创建具有不可打印字符 即 ASCII 21 的 JSON 这是无效的 JSON 我该如何解决这个问题 删除不可打印字符的正则表达式会起作用吗 什么正则表达式会删除不可打印的字符 嗯 这个简单的解决方案是为 cff

随机推荐

  • TestNG+Mybatis+Extent+lombok管理测试

    一 项目结构 maven引入jar包
  • GqlQuery 类

    http wapbaike baidu com view 8965981 htm uid D0604A052A48B0F5013EC29A99F19073 bd page type 1 st 3 step 2 net 0 ldr 0 概述
  • csv反序列化_Python实现序列化及csv文件读取

    导读热词 这篇文章主要介绍了Python实现序列化及csv文件读取 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 一 python 序列化 序列化指的是将对象转化为 串行化 数据形式 存储
  • 阿里达摩院金榕:从技术到科学,中国AI向何处去?

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 本文转载自 机器之心 作者 金榕 阿里巴巴达摩院副院长 原密歇根州立大学终身教授 如果从达特茅斯会议起算 AI 已经走过 65 年历程 尤其是近些年深度学习兴起后 AI
  • Python爬虫的解析(学习于b站尚硅谷)

    目录 一 xpath 1 xpath插件的安装 2 xpath的基本使用 1 xpath的使用方法与基本语法 路径查询 谓词查询 内容查询 使用text查看标签内容 属性查询 模糊查询 逻辑运算 2 安装lxml库 3 代码的演示 3 获取
  • cmake升级及多版本管理

    查看原有的cmake cmake version which cmake gt gt gt usr bin cmake 下载要装的cmake源文件 解压并进入 使用已有的cmake安装 mkdir build cd build cmake
  • 计算机操作系统面试题

    一 认识汇编语言 汇编的本质是机器语言的助记符号 汇编语言本质就是机器语言 二 CPU的基本组成 PC 程序计数器 记录将要执行的指令的地址 Registers 暂时存储CPU计算需要用到的数据 ALU 寄存器中取到数据 进行运算然后将结果
  • 分布式存储基础知识

    2018 4 26 分布式存储的数据类型有以下三类 非结构化的数据 主要是数据之间的关联系不大 像文本图片之类的数据 结构化的数据 数据之间关联系很大 关系型数据库这种 可以用表进行表示的 半结构化的数据 介于上述两种数据类型之间 数据之间
  • DCMTK解析DICOM汇总

    DICOM头信息示例如下 0002 0000 Group Length VR UL Length 4 Value 184 0002 0001 File Meta Information Version VR OB Length 2 Valu
  • 抖音综合榜单数据爬虫案例

    偶然在抖音创作平台中看到了一系列的排行榜 如热搜榜 热门视频榜 娱乐明星榜 音乐榜等等 网页链接 https creator douyin com billboard home 登陆后可见数据 榜单接口 接口名 类型 链接 热搜榜单 Get
  • SNPP/VIIRS 数据介绍和下载

    SNPP VIIRS 数据介绍和下载 最近刚接触VIIRS卫星数据 用于洪水监测 主要记录VIIRS数据相关资料和数据下载方法 一 VIIRS数据简介 1 NPP卫星系统 NPP National Polar orbiting Partne
  • 一个自动生成卡通头像的工具网站

    1 打开网站 https deepai org machine learning model toonify 2 选择照片 3 上传照片 4 结果
  • flutter 获取屏幕宽度工具类

    import dart ui 工具类 class GlobalUtils static num screenW 0 设备的宽高 static num screenH 0 设备的宽高 static num devicePixelRatio 0
  • 在IE9使用CORS的思路——XDomainRequest

    前端最常用的就是CORS来调用Restful接口 但是IE9却真够侘寂的 连常规的XHR都不能完整支持 于是 动手写一遍IE10以下专属的 XDomainRequest 但是我测试了一下XDomainRequest 它能接收html tex
  • 开始学习Webpack-应用TypeScript,配置热加载和Source Map

    项目初始化 采用TypeScript 我们的版本是 node version v8 5 0 npm version 5 5 1 1 2 3 4 npm版本升级了 因为npm最近带来了新特性 本地会生成package lock json 能
  • python程序实例源代码-python实例-兔子和獾(塔防游戏)附源码

    原文 兔子和獾大战python小游戏 英文 https www raywenderlich com 24252 beginning game programming for teens with python 中文 http blog jo
  • Anaconda使用conda连接网络出现错误

    在进行更新或者其他操作时报网络连接错误如下 CondaHTTPError HTTP None None for url https repo continuum io pkg Elapsed None An HTTP error occur
  • java在线播放_Java实现视频在线播放flv视频

    1 首先使用Idea创建一个Spring Boot项目 2 在application properties文件下加入以下代码 进行DEBUG日志输出 配置pom xml文件 logging日志配置 logging level root WA
  • QT connect函数

    connect是信号与槽的连接函数 调用方法大致分为以下几类 以QPushButton为例 一 信号 槽函数均不带参数 connect button SIGNAL clicked this SLOT onbuttonClicked conn
  • C、C++中对json格式数据的解析和封装

    C 首先需要调库 include