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格式字符串的更多相关文章

  1. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  2. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  3. List转换成json格式字符串,json格式字符串转换成list

    一.List转换成json字符串 这个比较简单,导入gson-x.x.jar, List<User> users = new ArrayList<User>(); Gson g ...

  4. iOS:JSON格式字符串转字典,字典转JSON格式字符串

    在iOS开发中,和服务器交互中,经常用到字典和JSON格式字符串相互转换. 代码如下: 1.JSON格式字符串转字典 + (NSDictionary *)dictionaryWithJsonStrin ...

  5. JSon_零基础_001_将布尔类型数组转换为JSon格式字符串,返回给界面

    将布尔类型数组转换为JSon格式字符串,返回给界面 需要导入包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * 下一步com ...

  6. json格式字符串与java.util.Map的互转(借助于jackson.jar)

    package com.test.javaAPI.json; /** * json工具类 * * @author Wei * @time 2016年10月2日 下午4:25:25 */ public ...

  7. FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

    fastJson对于json格式字符串的解析主要用到了一下三个类: JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换. JSONObject:fas ...

  8. JSON(五)——同步请求中使用JSON格式字符串进行交互(不太常见的用法)

    在同步请求中使用JSON格式进行数据交互的场景并不多,同步请求是浏览器直接与服务器进行数据交互的大多是用jsp的标签jstl和el表达式对请求中的数据进行数据的渲染.我也是在一次开发中要从其它服务器提 ...

  9. JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...

随机推荐

  1. Python进阶小结

    目录 一.异常TODO 二.深浅拷贝 2.1 拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字符串类型内置方法 3 ...

  2. spring-framework-core-ioc Container

    阅读须知 实例化bean xml方式实例化bean 注解方式实例化bean java方式实例化bean ClassPathXmlApplication和AnnotationConfigApplicat ...

  3. leetcode一刷总结,明天二刷

    1:基础的数据结构:图掌握极差,二叉树次之 2:常用的算法思想:dp,深度有先,广度优先等等. 3:优化以解决的题目,注意思想的总结 4:将约150道题都刷掉 5:优先解决设计算法思想的题目类别,其次 ...

  4. C++入门到理解阶段二基础篇(6)——C++数组

    概述 C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比如 numbe ...

  5. Python笔记:设计模式之命令模式

    命令模式,正如模式的名字一样,该模式中的不同操作都可以当做不同的命令来执行,可以使用队列来执行一系列的命令,也可以单独执行某个命令.该模式重点是将不同的操作封装为不同的命令对象,将操作的调用者与执行者 ...

  6. 史上最全Winform中使用ZedGraph教程与资源汇总整理(附资源下载)

    场景 C#窗体应用中使用ZedGraph曲线插件绘制图表: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99716066 Win ...

  7. django10-form表单组件

    1.form组件的主要功能 生成页面的HTML标签和样式 ,将前端form表单的代码放在后端生成!! 对用户提交的数据进行校验(正则) 自动生成错误信息 保留上次输入信息 2.form组件常用字段与插 ...

  8. 1-函数返回值-return详解及应用-1

    return 返回值   可以是:数字.字符串.布尔.函数.对象(元素\[]\{}\null).未定义  <script> function fn1(){return 100;} aler ...

  9. arcgis api for javascript 学习(五) 实现地图绘制工具

    1.本文实现的功能为鼠标与地图之间的交互,能够在地图上绘制不同形状的图形 2.代码部分主要讲到的为Graphic函数的相关功能 <!DOCTYPE html> <html> & ...

  10. fatal error: iconv.h: No such file or directory

    CodeLite CodeLite编译(使用Cygwin Toolchain)出现如下错误: fatal error: iconv.h: No such file or directory 解决办法 ...