C读取json格式字符串
python调用C库时参数太多,约定传json格式字符串,C解析
#include<stdio.h>
#include<string.h>
#include<stdlib.h> typedef struct __Json_
{
int byExposureModeSet;
int byFocusMode;
int wMinFocusDistance;
}Json; int HandleStr(char *pStr, Json *pStuJson);
int GetValue(char **pStr, char *pValue);
void EarseSpace(char *pStr);
int DelLeftSpace(char *szbuf);
int DelRightSpace(char *szbuf); int main()
{
char str[] = "\"byExposureModeSet\" : \"2\", \"byFocusMode\" : \"2\", \"wMinFocusDistance\" : \"10\"";
printf("%s\n", str); Json stuJson = {};
memset(&stuJson, , sizeof(stuJson)); HandleStr(str, &stuJson); printf("stuJson.byExposureModeSet = %d, stuJson.byFocusMode = %d, stuJson.wMinFocusDistance = %d\n",
stuJson.byExposureModeSet, stuJson.byFocusMode, stuJson.wMinFocusDistance); return ;
} int HandleStr(char *pStr, Json *pStuJson)
{
int iRet = -;
char *tmp = pStr; char key[] = {};
char value[] = {}; while(tmp != NULL)
{ memset(key, , sizeof(key));
memset(value, , sizeof(value));
iRet = GetValue(&tmp, key);
tmp = strstr(tmp, ":") + ; iRet = GetValue(&tmp, value); printf("{%s} : {%s}\n", key, value);
if ( == strcmp(key, "byExposureModeSet"))
{
pStuJson->byExposureModeSet = atoi(value);
}
else if ( == strcmp(key, "byFocusMode"))
{
pStuJson->byFocusMode = atoi(value);
}
else if ( == strcmp(key, "wMinFocusDistance"))
{
pStuJson->wMinFocusDistance = atoi(value);
}
tmp = strstr(tmp, ",");
}
return iRet;
} int GetValue(char **pStr, char *pValue)
{
int iRet = ; char *pBegin = *pStr;
char *pEnd = NULL; pBegin = strstr(pBegin, "\"");
pEnd = strstr(pBegin+, "\""); int len_str = pEnd-pBegin;
memcpy(pValue, pBegin+, len_str-);
//printf("pValue = {%s}\n", pValue); iRet = len_str; *pStr = pEnd;
return iRet;
} int DelLeftSpace(char *szbuf)
{
int iRet = -;
int iLen = ;
int i = ;
int j = ;
int k = ; if(NULL != szbuf)
{
iRet = ;
iLen = strlen(szbuf);
for(i = ; i < iLen; i++)
{
if( (' ' != szbuf[i]) && ('\t' != szbuf[i])
&& ('\r' != szbuf[i]) && ('\n' != szbuf[i]) )
{
if( != i)
{
j = i;
k = ;
while(j < iLen)
{
szbuf[k++] = szbuf[j++];
}
szbuf[k] = '\0';
}
break;
} if (i == (iLen - ))
{
szbuf[] = '\0';
break;
}
}
} return iRet;
} int DelRightSpace(char *szbuf)
{
int iRet = -;
int iLen = ;
int i = ; if(NULL != szbuf)
{
iRet = ;
iLen = strlen(szbuf);
for(i = (iLen - ); i >= ; i--)
{
if( (' ' != szbuf[i]) && ('\t' != szbuf[i])
&& ('\r' != szbuf[i]) && ('\n' != szbuf[i]) )
{
if(i != iLen - )
{
szbuf[i+] = '\0';
}
break;
} if(i <= )
{
szbuf[] = '\0';
break;
}
}
} return iRet;
} void EarseSpace(char *pStr)
{
char *pTmp = pStr;
int len = strlen(pTmp);
int i = len - ;
for (; i > ; i--)
{
if (pTmp[i-] != ' ')
{
pTmp[i] = ;
break;
}
} int k = ;
int j = ;
for (i = ; i < len; i++)
{
if (i != && pTmp[i] != ' ')
{
k = i;
while(k < len)
{
pTmp[j++] = pTmp[k++];
}
break;
}
} pStr = pTmp;
}
C读取json格式字符串的更多相关文章
- Android读取JSON格式数据
Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...
- WebApi返回Json格式字符串
WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...
- List转换成json格式字符串,json格式字符串转换成list
一.List转换成json字符串 这个比较简单,导入gson-x.x.jar, List<User> users = new ArrayList<User>(); Gson g ...
- iOS:JSON格式字符串转字典,字典转JSON格式字符串
在iOS开发中,和服务器交互中,经常用到字典和JSON格式字符串相互转换. 代码如下: 1.JSON格式字符串转字典 + (NSDictionary *)dictionaryWithJsonStrin ...
- JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面
将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...
- json格式字符串与java.util.Map的互转(借助于jackson.jar)
package com.test.javaAPI.json; /** * json工具类 * * @author Wei * @time 2016年10月2日 下午4:25:25 */ public ...
- FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...
- JSON(五)——同步请求中使用JSON格式字符串进行交互(不太常见的用法)
在同步请求中使用JSON格式进行数据交互的场景并不多,同步请求是浏览器直接与服务器进行数据交互的大多是用jsp的标签jstl和el表达式对请求中的数据进行数据的渲染.我也是在一次开发中要从其它服务器提 ...
- JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换
首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...
随机推荐
- Spring-AOP-配置实现五大通知
码云: xml配置方法:https://gitee.com/MarkPolaris/spring_aop_1 注解配置方法:https://gitee.com/MarkPolaris/spring-e ...
- Luogu P5298 [PKUWC2018]Minimax
好劲的题目啊,根本没往线段树合并方面去想啊 首先每种权值都有可能出现,因此我们先排个序然后一个一个求概率 由于此时数的值域变成\([1,m]\)(离散以后),我们可以设一个DP:\(f_{x,i}\) ...
- 完美解决MacOS catalina 升级后Vmware黑屏的问题
完美解决MacOS catalina 升级后VMware黑屏 1.关闭MacOS的rootless机制 #Rootless机制将成为对抗恶意程序的最后防线 1.尝试关闭Rootless,重启按住 Co ...
- mysql--事务详解
事务的四大特性: # 原子性(atomicity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 ...
- 大话设计模式Python实现-中介者模式
中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 下面是一个中介者模式的demo ...
- IT兄弟连 Java语法教程 流程控制语句 循环结构语句1
循环语句可以在满足循环条件的情况下,反复执行某一点代码,这段被重复执行的代码被称为循环体,当反复执行这个循环体时,需要在合适的时候把循环条件该为假,从而结束循环,否则循环将一直执行下去,形成死循环.循 ...
- EventBus 使用/架构/源码分析
EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信.EventBus以其简单易懂.优雅.开销小等优点而备受欢迎. github 地址:https://git ...
- 恢复Chrome 78以上版本的地址栏https和www显示
Google在Chrome不知道是脑子抽抽还是怎么回事,非要把https://www从地址栏中隐藏掉. htttps://www.pool.ntp.org就给你显示个pool.ntp.org,这分明就 ...
- 如何让Python爬虫一天抓取100万张网页
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...
- HashMap、ConcurrentHashMap解析
一.HashMap分析 在JDK1.8之前,hashMap由数组+链表组成,1.8之后,对hashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组+链表+红黑树组成.查找时,根据hash ...