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. 创建windows服务方法

    将exe程序创建windows服务 sc create TestService binpath= "c:/in estapp.exe" displayname= "Tes ...

  2. angular6 multipart/form-data Post

    一般情况下用的都是 第三种  然后碰到后台要求的是这种格式的数据 这时候我们就要修改一下我们的post 请求头,话不多说 直接上代码. 这样子的话 就ok啦!

  3. Python连载47-json文件、正则表达式初步

    一.在线工具 1.https://www.sojson.com/ 2.http://www.w3cshool.com.cn/json/ 3.http://www.runoob.com/json/jso ...

  4. 【STM32H7教程】第21章 STM32H7的NVIC中断分组和配置(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第21章       STM32H7的NVIC中断分组和配置( ...

  5. Vs Code 2019软件安装教程及常用的入门设置

    小编认为VsCode是一款非常好用的编辑器,插件丰富,支持的语言种类非常多.我所使用VsCode主要打一些前端的代码,自己感觉very good. 点击运行. 按图所示操作. 安装教程很简单的,主要是 ...

  6. IT兄弟连 HTML5教程 HTML5的学习线路图 第二、三阶段

    第二阶段编写用户交互功能 通过第一阶段的学习虽说可以完成页面制作,但并不完美,不能算是合格的前端工程师,所以要继续学习如图1.13中的第二阶段内容.现在的Web页面都融入了大量的特效,并且多数需要与用 ...

  7. OpenGL入门1.7:摄像机

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 我们已经知道了何为观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点) OpenGL本身没有摄像机(Camera)的概 ...

  8. Web前端——css

    css 推荐的样式编写顺序: Positioning:定位 Box model:盒子模型.大小等 Typographic:文字系列.排印等 Visual:可视化.背景等 Misc:其它混杂模式 居中 ...

  9. Java 线程与多线程

    Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...

  10. SparkStreaming 整合kafka Demo

    这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示 你得有zookeeper和kafka 我这里是3台节点主机 架构图 ...