jsmn输出

news/2024/9/15 12:15:40/ 标签: 物联网

对应c程序:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "jsmn.h"#define my_printf(format, ...) printf(format, ##__VA_ARGS__)
//#define my_printf(format, ...)
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
const char * get_jsmn_token_type(const jsmntype_t type)
{switch (type) {case JSMN_UNDEFINED: return "JSMN_UNDEFINED";case JSMN_OBJECT: return "JSMN_OBJECT";case JSMN_ARRAY: return "JSMN_ARRAY";case JSMN_STRING: return "JSMN_STRING";case JSMN_PRIMITIVE: return "JSMN_PRIMITIVE";default: return "Unknown"; // 处理未知类型}
}
static int jsoneq(const char *json, jsmntok_t *tok, const char *s)
{if (tok->start >= tok->end){return -1;}if ( tok->type == JSMN_STRING && (int)strlen(s) == tok->end - tok->start &&strncmp(json + tok->start, s, tok->end - tok->start) == 0){return 0;}return -1;
}int main(int argc, char *argv[])
{const char *json = "{\"1\":\"11\",\"data\":{\"2\":22,\"3\":33,\"4\":44,\"5\":55,\"6\":66,\"7\":77,\"8\":88,\"9\":99,\"A\":AA,\"B\":BB,\"C\":CC,\"D\":DD,\"E\":EE,\"F\":FF,\"G\":GG,\"H\":\"HH\"},\"I\":0}";jsmn_parser parser;jsmntok_t tokens[64]; // 假设最多解析x个tokensconst char *value;uint16_t value_len;char tmp[64];// 初始化解析器jsmn_init(&parser);// 解析JSON字符串int num_tokens = jsmn_parse(&parser, json, strlen(json), tokens, sizeof(tokens)/sizeof(tokens[0]));if (num_tokens < 0) {my_printf("Failed to parse JSON: %d\n", num_tokens);return 1;}int i, j, k;for(i = 0;i < num_tokens; i++){my_printf("[line:%3d][%2d][type:%16s][size:%d][%.*s]\n", __LINE__, i, get_jsmn_token_type(tokens[i].type), tokens[i].size, tokens[i].end-tokens[i].start, json+tokens[i].start);}for (i = 0; i < num_tokens; i++){if (tokens[i].type == JSMN_STRING && tokens[i].size == 1){ // name均为JSMN_STRING且size=1my_printf("[line:%3d][%2d][type:%16s][size:%d]key: %.*s ",__LINE__, i, get_jsmn_token_type(tokens[i].type), tokens[i].size, tokens[i].end-tokens[i].start, json+tokens[i].start);if (jsoneq(json, &tokens[i], "data") == 0){ // data内为objectjsmntok_t *data_token = &tokens[i + 1];my_printf("\n[line:%3d][%2d][type:%16s][size:%d]value:%.*s\n",__LINE__, i + 1, get_jsmn_token_type(data_token->type), data_token->size, data_token->end-data_token->start, json+data_token->start);if (data_token->type == JSMN_OBJECT){for (j=i+2, k=0; j<num_tokens && k<data_token->size; j++,k++){if (tokens[j].type == JSMN_STRING && tokens[j].size == 1){my_printf("[line:%3d][%2d][type:%16s][size:%d]key: %.*s ",__LINE__, j, get_jsmn_token_type(tokens[j].type), tokens[j].size, tokens[j].end-tokens[j].start, json+tokens[j].start);// 获取valuevalue = json + tokens[j + 1].start;value_len = tokens[j + 1].end - tokens[j + 1].start;memset (tmp, 0, sizeof(tmp));if (value_len && value_len < sizeof(tmp)){memcpy (tmp, value, value_len);my_printf("[line:%3d]value:%.*s [size:%d][type:%16s]\n", __LINE__, value_len, value, tokens[j+1].size, get_jsmn_token_type(tokens[j+1].type));}j ++;}}i = j-1;}}else{value = json + tokens[i + 1].start;value_len = tokens[i + 1].end - tokens[i + 1].start;my_printf("[line:%3d]value:%.*s [size:%d][type:%16s]\n", __LINE__, value_len, value, tokens[i+1].size, get_jsmn_token_type(tokens[i+1].type));i++;}}}return 0;
}

.vscode目录下:

c_cpp_properties.json内容:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"cStandard": "c17","cppStandard": "c++17","compilerPath": "E:\\codeblocks-20.03mingw-nosetup\\MinGW\\bin\\g++.exe"}],"version": 4
}

tasks.json内容:
 

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "编译jsmn项目文件","command": "E:\\codeblocks-20.03mingw-nosetup\\MinGW\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "E:\\codeblocks-20.03mingw-nosetup\\MinGW\\bin"},"problemMatcher": ["$gcc"],"group": "build","detail": "编译器: E:\\codeblocks-20.03mingw-nosetup\\MinGW\\bin\\g++.exe"}]
}

launch.json内容:

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "E:\\codeblocks-20.03mingw-nosetup\\MinGW\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}


http://www.ppmy.cn/news/1519439.html

相关文章

docker部署流程

1、安装python容器 docker pull python:3.12.4 2、挂载本地目录及容器目录并分配一个伪输入输出&#xff0c;进入容器命令行 docker run -it --name pytest -v /Users/python_work/ai:/root/text_similar python:3.12.4 bash 3、拉取python项目需要依赖包 pip3 install XXX …

FAISS 索引

FAISS&#xff08;Facebook AI Similarity Search&#xff09;是一个由 Facebook 开发的开源库&#xff0c;用于高效的相似性搜索和密集向量的聚类。它非常适合处理大规模的向量搜索任务&#xff0c;例如推荐系统、图像搜索、自然语言处理中的嵌入搜索等。 FAISS 文件概述 FAI…

UE5开发——射击武器类拾取

整体框架&#xff1a; 拾取武器 要在 Unreal Engine 5 (UE5) 中实现一个按 E 键拾取武器的功能&#xff0c;您可以遵循以下步骤&#xff1a; ### 步骤 1: 创建拾取物品的基础类 1. 在 Content Browser 中创建一个新的 C 类&#xff0c;继承自 AActor 或者 AStaticMeshActor。…

(学习总结15)C++11小语法与拷贝问题

C11小语法与拷贝问题 auto关键字范围forinitializer_list深拷贝与浅拷贝写时拷贝 以下代码环境为 VS2022 C。 auto关键字 在早期 C/C 中 auto 的含义是&#xff1a;使用 auto 修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;不过一般都会隐藏&#xff0c;导致…

Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2

本次学习主要针对自适应学习率&#xff1b;介绍了Adagrad&#xff0c;RMSprop和Adam优化器 1、为什么需要自适应学习率&#xff1a; 训练一个网络&#xff0c;在走到临界点的时候损失不再下降&#xff0c;而梯度并没有变得很小。相当于下坡路在两步之间&#xff0c;而步子迈大…

加载SQLite扩展的db.loadExtension方法

在Node.js环境中&#xff0c;sqlite3库为开发者提供了一个与SQLite数据库进行交互的简洁API。除了基本的数据库操作外&#xff0c;sqlite3还支持加载SQLite扩展&#xff0c;这些扩展可以提供额外的功能&#xff0c;如全文搜索、地理空间支持等。db.loadExtension方法就是用来加…

JavaScript 在 VSCode 中的开发体验

JavaScript 在 VSCode 中的开发体验 JavaScript 是一种广泛使用的编程语言,它让网页变得生动有趣。而 VSCode(Visual Studio Code)则是一款非常流行的代码编辑器,以其强大的功能和灵活性著称。在这篇文章中,我们将探讨在 VSCode 中使用 JavaScript 进行开发的体验,包括其…

Ubuntu 安装个人热点

1. 安装必要的软件 首先&#xff0c;我们需要确保有一些工具已经装好&#xff0c;这些工具会帮助我们创建 Wi-Fi 热点。打开终端&#xff0c;输入以下命令来安装这些工具&#xff1a; sudo apt-get install git hostapd iptables dnsmasq 2. 下载并安装 create_ap 我们接下来…

JavaScript 中的数组与对象

在 JavaScript 编程的浩瀚世界中&#xff0c;数组和对象作为核心的数据结构&#xff0c;扮演着至关重要的角色。它们不仅为数据的存储和操作提供了强大的工具&#xff0c;还在各种应用场景中展现出独特的魅力。 一、数组&#xff1a;有序的数据集合 数组是一组有序的数据集合…

51单片机——模块化编程

1、模块化编程介绍 传统方式编程&#xff1a;所有的函数均放在main.c里&#xff0c;若使用的模块比较多&#xff0c;则一个文件内会有很多的代码&#xff0c;不利于代码的组织和管理&#xff0c;而且很影响编程者的思路。 模块化编程&#xff1a;把各个模块的代码放在不同的.…

Leetcode 3272. Find the Count of Good Integers

Leetcode 3272. Find the Count of Good Integers 1. 解题思路2. 代码实现 题目链接&#xff1a;3272. Find the Count of Good Integers 1. 解题思路 这一题我思路上是比较暴力的&#xff0c;就是典型地分步骤执行&#xff1a; 找出所有的可能构成回文的长度为n的字符组合…

.NetCore发布到IIS

一&#xff1a;安装sdk(下载 .NET 8.0 SDK (v8.0.302) - Windows x64 Installer) 与donet Runtime(.NET Downloads (Linux, macOS, and Windows))选择对应的版本下载 二&#xff1a;解决问题&#xff1a;HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面&#x…

快速回顾-CSS

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>CSS66</title><style>/* 选择器 *//* h4…

云计算第二阶段---DBA Day8-Day9

DBA Day8 该阶段的2天内容,都会和数据库中间件,集群配置有关. 什么是中间件&#xff1f; 通俗来说&#xff0c;就是在正式文件内容从客户端发送或获取请求时&#xff0c;在传播过程中地点中间商&#xff0c;负责管理请求&#xff0c;并对其进行分类。 环境准备: 准备…

计算机网络概述(协议层次与服务模型)

目录 1.协议层次 2.服务模型 1.协议层次 层次化方式实现复杂网络功能&#xff1a; 将网络复杂的功能分成明确的层次&#xff0c;每一层实现了其中一个或一组功能&#xff0c;功能中有其上层可以使用的功能&#xff1a;服务本层协议实体相互交互执行本层的协议动作&#xff0…

Force Yc 第九引导公告页HTML源码

源码介绍 Force Yc 第九引导公告页HTML源码 此源码可以播放自己的音乐 - 视频 背景修改:dist\images 名字:bg.jpg 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面…

数智化粮仓综合监控管理系统设计方案WORD-2023

关注智慧方案文库&#xff0c;学习9000多份智慧城市智慧医院&#xff0c;智慧水利&#xff0c;智能制造&#xff0c;数字化转型&#xff0c;智慧工厂&#xff0c;智慧矿山&#xff0c;智慧交通&#xff0c;智慧粮仓&#xff0c;工业互联网&#xff0c;数字孪生......持续更新热…

【AI】自动驾驶的分级

国际汽车工程学会&#xff08;SAE&#xff09;自动驾驶标准将汽车驾驶技术分为从L0&#xff08;无驾驶自动化&#xff09;至L5&#xff08;完全驾驶自动化&#xff09;的6个级别&#xff0c;通常称L3及以上级别的自动驾驶为高级别自动驾驶&#xff0c;车辆驾驶任务的主导权由驾…

GPT-SoVITS-WebUI 初体验

一、安装 conda create -n GPTSoVits python3.9 # …

心法利器[117] | 算法技术设计思考:迭代的思维方式

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2023年新的文章合集已经发布&#xff0c;获取方式看这里&#xff1a;又添十万字-CS的陋室2023年文章合集来袭&#xff0c;更…