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 ...
随机推荐
- Tarjan在图论中的应用(三)——用Tarjan来求解2-SAT
前言 \(2-SAT\)的解法不止一种(例如暴搜?),但最高效的应该还是\(Tarjan\). 说来其实我早就写过用\(Tarjan\)求解\(2-SAT\)的题目了(就是这道题:[2019.8.14 ...
- Codeforces Round #603 (Div. 2) A. Sweet Problem 水题
A. Sweet Problem the first pile contains only red candies and there are r candies in it, the second ...
- 【Notepad++】notepad++主题和字体设置(非常好看舒服的)
#效果图 1.字体:Courier New 字号:14号字体 2.字体:Consolas 字号:14号字体 #设置方法 1.设置---语言格式设置 2.选择主题,同时勾选“使用全局字体”“使用全局字体 ...
- 细数使用View UI(iView)开发中遇到的坑
一.前言 View UI,即原先的 iView,是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品. 官网地址:https://www.iviewui.com/docs ...
- windows 10使用vscode进行远程代码开发 | tutorial to use vscode for remote development using ssh on windows
本文首发于个人博客https://kezunlin.me/post/c93b6ba6/,欢迎阅读最新内容! tutorial to use vscode for remote development ...
- Disruptor系列(二)— disruptor使用
本文译自Dirsruptor在github上的wiki中文章:Getting Started 获取Disruptor Disruptor jar包可以从maven仓库mvnrepository获取,可 ...
- 猪肉涨价飞快?让我们用python来预测一下今年最后一个月的猪肉价格吧!
今天我们将使用Facebook的“先知”模型来预测2019年12月广东省的猪肉价格,本实验仅供参考. 1.准备数据 在猪价系统网站上利用开发者工具获得过去一年广东省的猪肉价格保存为json格式:htt ...
- 接口测试基础--Fiddler、Postman、Python实现对接口的测试
写在前面:本文主要的章节规划: 1.什么是接口测试 另外,有的时候会直接调用别的公司的接口,比如银行的.淘宝的.支付宝的,此时也需要做接口测试以及验证数据: 做接口测试的好处: 其中, ...
- XAF-从业务类继承 (XPO)
In this lesson, you will learn how to implement business classes for your application using the Busi ...
- Qt Creator配置MSVC调试器
安装完QT后会看到Qt Creator中的MSVC构建组件带有黄色的感叹号,那是因为没有调试器的原因.由于Qt-MSVC版本套件没有默认安装调试器, 需要我们自己手动下载安装. 根据官方文档http: ...