php如何和c进行数据交换,PHP与 后台c交换数据 | 学步园

为什么要用json

跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。从各浏览器的支持来看,JSON解决了因不同浏览器对XML DOM解析方式不同而引起的问题。

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。

我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识。

从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);

结果为

{"a":1,"b":2,"c":3,"d":4,"e":5}

再看一个对象转换的例子:

$obj->body = 'another post';

$obj->id = 21;

$obj->approved = true;

$obj->favorite_count = 1;

$obj->status = NULL;

echo json_encode($obj);

结果为

{

"body":"another post",

"id":21,

"approved":true,

"favorite_count":1,

"status":null

}

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。

前文出自:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

从上面的介绍,我们可以知道php对json的支持可以说是做到非常方便了。那c呢?

先看json的数据结构c中没有对象,所以json数据是采用链表存储的

C代码  3681d80584f1946a32ec276ffd412cfd.png

typedefstructcJSON {

structcJSON *next,*prev;// 数组 对象数据中用到

structcJSON *child;// 数组 和对象中指向子数组对象或值

inttype;// 元素的类型,如是对象还是数组

char*valuestring;// 如果是字符串

intvalueint;// 如果是数值

doublevaluedouble;// 如果类型是cJSON_Number

char*string;// The item's name string, if this item is the child of, or is in the list of subitems of an object.

} cJSON;

比如你有一个json数据

Javascript代码  3681d80584f1946a32ec276ffd412cfd.png

{

"name":"Jack (\"Bee\") Nimble",

"format": {

"type":"rect",

"width":      1920,

"height":     1080,

"interlace":false,

"frame rate": 24

}

}

那么你可以1:讲字符串解析成json结构体。

C代码  3681d80584f1946a32ec276ffd412cfd.png

cJSON *root = cJSON_Parse(my_json_string);

2:获取某个元素

C代码  3681d80584f1946a32ec276ffd412cfd.png

cJSON *format = cJSON_GetObjectItem(root,"format");

intframerate = cJSON_GetObjectItem(format,"frame rate")->valueint;

3:讲json结构体转换成字符串

C代码  3681d80584f1946a32ec276ffd412cfd.png

char*rendered=cJSON_Print(root);

4:删除

C代码  3681d80584f1946a32ec276ffd412cfd.png

cJSON_Delete(root);

5:构建一个json结构体

C代码  3681d80584f1946a32ec276ffd412cfd.png

cJSON *root,*fmt;

root=cJSON_CreateObject();

cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));

cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());

cJSON_AddStringToObject(fmt,"type","rect");

cJSON_AddNumberToObject(fmt,"width",        1920);

cJSON_AddNumberToObject(fmt,"height",       1080);

cJSON_AddFalseToObject (fmt,"interlace");

cJSON_AddNumberToObject(fmt,"frame rate",   24);

也是一样方便的。

其实个人理解的json也是字符串,前后台如何传递字符串呢?

可以通过数据库。也可以通过文件。

也可以通过前台直接放入函数入库(不够灵活)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1 课外笔记之网页动画——jsp系列问题

1.直接用记事本进行网页的编写&#xff0c;代码中还有中文&#xff0c;用网页打开后&#xff0c;会导致中文部分出现乱码问题。 解决办法&#xff1a; 1.保存为utf-8编码&#xff0c;保存为gbk编码 2.添加一行代码&#xff1a;<meta http-equiv"Content-Type" con…

php while结束循环吗,php while循环退不出是什么有关问题

php while循环退不出是什么问题&#xff1f;include(include/config.php);include(include/dbclass.php);session_start();$db db::getInstance();// $db->check_user_login(); //检查用户是否登录$db->createcon(); //建立连接// $user$_SESSION["u…

8月31日笔记

1、http返回码200、302、304、404、500的含义 2、mybatis中插入记录时获取主键 3、sql&#xff0c;如何查询两个包含两个不同列的结果 4、sql&#xff0c;如何把邮箱中的139.com替换为qq.com 5、sql&#xff0c;如何获取姓名中的姓&#xff0c;并且统计每一个姓的数量 6、还有四…

硒测试的干净架构

在这篇博客文章中&#xff0c;我想介绍一种具有最佳设计模式的Selenium测试的简洁架构&#xff1a;页面对象&#xff0c;页面元素&#xff08;通常称为HTML包装器&#xff09;和自行开发的非常小巧的框架。 该体系结构不限于示例中使用的Java&#xff0c;也可以以任何其他语言应…

ThinkPHP5 封装邮件发送服务(可发附件)

1、Composer 安装 phpmailer 1composer require phpmailer/phpmailer2、ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend/Mail.php 文件里&#xff0c;内容如下&#xff1a; 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748…

php中如何定义常量和变量的区别,php define常量定义与变量区别

常量在使用前必须要定义&#xff0c;否则程序执行会出错。在php中使用define()函数来定义常量。1、语法格式&#xff1a;define("常量名称","常量的值");例如&#xff1a;define("php360","完美的php");下面还是来一个范例吧&#xff…

PHP小语种网站开发,当阳小语种建站

当阳小语种建站&#xff0c;六脉(LIUMAI)&#xff0c;专注于帮助中小企业开拓海外市场获取外贸订单&#xff0c;提供外贸整体解决方案。当阳小语种建站&#xff0c; 拥有强大的搜索引擎优化功能&#xff0c;通过操作全球贸易通后台可以轻松实现对英语及小语种网站的搜索优化&am…

密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

密码学笔记——eval(function(p,a,c,k,e,d) 的加密破解 例题&#xff1a; 小明某天在看js的时候&#xff0c;突然看到了这么一段代码&#xff0c;发现怎么也理不出代码逻辑&#xff0c;你能帮帮他吗&#xff1f; 格式&#xff1a;SimCTF{} eval(function(p,a,c,k,e,d){efunctio…

Spring Boot Cassandra的第一步

如果您想通过Spring Boot开始使用Cassandra NoSQL数据库&#xff0c;最好的资源可能是此处提供的Cassandra示例和Spring数据Cassandra文档 。 在这里&#xff0c;我将采取一些绕过的方式&#xff0c;实际是在本地安装Cassandra并对其进行基本测试&#xff0c;我的目标是在下一…

php提交表单显示错误,php – 在提交注册表单时使用jQuery显示错误

你需要修好几件事情。>首先&#xff0c;处理注册过程的文件不应该是与表单相同的文件。>它纯粹用于处理数据&#xff0c;因此不能使用头(“Location&#xff1a;login.php”)直接重定向浏览器。这部分应该由你的JavaScript代码来处理。>您还需要告诉浏览器&#xff0c…

Selenium-键盘操作

在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合操作如CtrlA全选),CtrlC(复制),CtrlV(粘贴).更多参考官方文档对应的编码http://selenium-python.readthedocs.org/api.html from selenium.webdriver.common.keys import keys send_kyes(Keys.ENTER) …

Python学习笔记----try...except...else

Python 中的异常处理&#xff1a; 一、try...except...else 程序运行过程中会出现类似以下错误&#xff1a; 1 a10 2 b0 3 ca/b 4 print(c) 运行结果为&#xff1a; Traceback (most recent call last): File "D:/Study/s14/day4/临时.py", line 13, in <module&g…

matlab_ga(),matlab遗传算法ga函数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function optimization4()A[];b[];Aeq[];beq[];LB[0.1;0.03;0.03;0.1;0.03;0.03];UB[0.4;0.06;0.06;0.4;0.06;0.06];nvars6;optionsgaoptimset(TimeLimit,inf,PlotFcns,{gaplotbestf},PopulationSize,10,Generations,15,PopInitRan…

Windows负载机JVM 远程监控Linux服务器下tomcat

基本是跟着网上的操作进行的&#xff0c;除了遇到一个Local host name unknown的问题&#xff1a; 一、Linux服务器操作部分 服务器地址&#xff1a;10.64.111.68 首先配置JMX&#xff1a; 1.找到jdk目录 [rootC68 demo]# echo $JAVA_HOME /root/demo/jdk1.8.0_60 2. cd 到/roo…

idea struts插件_使用Struts 2的查询网格(无插件)

idea struts插件当将jQuery与struts 2结合使用时&#xff0c;开发人员被说服使用struts2-jQuery插件 。 因为大多数论坛和其他Internet资源都支持jQuery struts2 jQuery插件。我有这种经验。 我想使用带有struts 2的jQuery网格插件&#xff0c;但不使用struts2 jQuery插件。 对…

matlab 值法确定各指标权重,Matlab学习系列19. 熵值法确定权重

19. 熵值法确定权重一、基本原理在信息论中&#xff0c;熵是对不确定性的一种度量。信息量越大&#xff0c;不确定性就越小&#xff0c;熵也就越小&#xff1b;信息量越小&#xff0c;不确定性越大&#xff0c;熵也越大。 根据熵的特性&#xff0c;可以通过计算熵值来判断一个事…

在Sqoop中管理密码的关键提示

Sqoop是用于Hadoop的流行数据传输工具。 Sqoop允许从结构化数据存储&#xff08;如关系数据库&#xff0c;企业数据仓库和NoSQL数据存储&#xff09;轻松导入和导出数据。 Sqoop还与Hive&#xff0c;HBase和Oozie等基于Hadoop的系统集成。 在此博客文章中&#xff0c;我将介绍…

php 商城套餐搭配功能,速卖通商品搭配套餐功能已上线!设置速卖通搭配套餐仅需三步...

据雨果网获悉&#xff0c;速卖通商品搭配套餐功能已于 10 月 19 日上线。商品搭配套餐的主要功能及作用&#xff0c;主要是帮助速卖通的卖家&#xff0c;通过自行选择商品&#xff0c;设置不同商品间搭配优惠促销价格&#xff0c;提高商品推广内容的丰富性及专业性&#xff0c;…

二维码支付原理分析及安全性的探究

“二维码支付”安全么&#xff1f; 1 引言 随时支付宝和微信的线下不断推广&#xff0c;目前使用手机进行二维码支付已经逐渐成为一种时尚了。 但是大家有没有思考过&#xff1a;这种便捷的支付方式到底安不安全呢&#xff1f;今天我们就针对这个话题来进行一些探讨吧。 2 …

python创建一个包,如何从python包创建一个osx应用程序/ dmg?

我不知道正确的方法&#xff0c;但是这种手动方法是我用于简单脚本的方法&#xff0c;似乎已经适当地执行了。我会假设我所在的任何目录&#xff0c;我的程序的Python文件都在相对的src /目录中&#xff0c;我要执行的文件(具有正确的shebang和执行权限)被命名为main.py。$ mkd…