为什么要用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代码  

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代码  

{

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

"format": {

"type":"rect",

"width":      1920,

"height":     1080,

"interlace":false,

"frame rate": 24

}

}

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

C代码  

cJSON *root = cJSON_Parse(my_json_string);

2:获取某个元素

C代码  

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

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

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

C代码  

char*rendered=cJSON_Print(root);

4:删除

C代码  

cJSON_Delete(root);

5:构建一个json结构体

C代码  

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也是字符串,前后台如何传递字符串呢?

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

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

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

  1. 【Layui】数据表格(与后台交互获取数据)

    html <table id="userList" lay-filter="userList"></table> js //用户列表 v ...

  2. 微信小程序从前端wxml页面数据获取,到JS页面数据对象字符化,传递给后台,前台再从后台获取数据并在wxml页面动态展示数据(前后台交互实现发表动态功能)

    页面: 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数. 事件对象可以携带额外信息,如 id, ...

  3. 计算机网络中可使用的数据通信方式,计算机网络中的数据通信交换技术分析

    摘要:数据通信是一种信息的传输通道,是利用计算机和网络技术来实现的,其中交换技术起着不可替代的作用.随着计算机技术的广泛应用,数据通信技术发展迅速,实现了计算机与计算机之间的信息传递,交换技术也因此而 ...

  4. mysql 交换 表分区_mysql分区表分区数据和普通表交换

    前言 在介绍交换分区之前,我们先了解一下 mysql 分区. 数据库的分区有两种:水平分区和垂直分区.而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区.水平分区即:以行为单位对表进行分区.比 ...

  5. 计算机网络通信中的交换方式有哪几种,数据通信方式有哪几种

    数字通信(digital telecommunications)是用数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式.它可传输电报.数字数据等数字信号,也可传输经过数字化处 ...

  6. 网间数据摆渡如何轻松实现数据安全交换

    很多企业为了保证内部信息的安全,都会建立一个专用的内部网络,通过物理隔离的方式,和外部的网络相隔绝.这样,对于内部网络的安全保障有了很大的提高,但是对于内外网的信息交互带来了很大的不便. 比如网闸就是 ...

  7. 计算机数据交换技术发展的顺序,计算机网络数据交换技术的发展探析

    [摘要] 随着经济的快速发展和网络科技的普及,人们也越来越重视计算机网络技术的发展,未来社会离不开计算机网络技术的应用,加快对计算机网络数据交换技术的创新和发展就变得尤为重要,本文主要是对计算机网络数 ...

  8. 数据脱敏在政务数据安全共享交换中的应用

    目前整个社会都面临着数字化转型,"疫情"的突发,如同催化剂般加速了各种业务数字化转型的进程,而在最近支持的政府大数据项目中,我们也欣喜的感受到转型进程中数据安全地位的变化:过去IT ...

  9. 交通行业提升数据利用效率的核心是做好数据交换与共享

    近年来,政策环境的持续优化让数据红利在交通行业加速释放,比如:2016年,交通运输部部署了综合交通运输大数据应用中心建设工作,同时也委托交通运输部交科院开展综合交通运输大数据政策标准研究等任务: 20 ...

最新文章

  1. VirtualBox上装CentOS5.8网络不通问题
  2. 字符串操作与正则表达式
  3. 《重构-改善既有代码的设计》-第1例:租赁影片(2)
  4. 获取iOS任意线程调用堆栈(四)符号化实战
  5. POJ 3050 Hopscotch
  6. 安装好数据库 提示计算机无法启动,DBC数据库异常无法启动!!!HERODB配置错误怎么解决呢?...
  7. apache 支持apk下载安装
  8. 查看git brach_Excel Go Brach – Excelebrations
  9. 斐讯n1 无线打印服务器,斐讯N1 设置旁路由(网关)的方法 | nas2x
  10. 解决复制网页文本多一个空格的问题
  11. 百度senta使用方法
  12. 基于STM32+华为云IOT设计的云平台监控系统
  13. python兔子繁殖问题_【算法】兔子繁殖之斐波那契数列
  14. 企业为什么做不好生产计划?
  15. 穿越鸿蒙电视剧,2020“必追”的5部穿越剧,每一部都有高颜值,剧荒的别错过!...
  16. Android修行手册 - Toolbar实践
  17. pdf怎么合并成一个文件?高效工具分享
  18. Android自定义通知栏/状态栏颜色
  19. Bilibili客户端的ReactNative版本(demo)
  20. 2022年蓝队初级护网总结

热门文章

  1. [渝粤教育] 中国人民解放军陆军工程大学 机械基础 参考 资料
  2. 【渝粤教育】国家开放大学2018年春季 7218-21T医学伦理学(本) 参考试题
  3. 【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)
  4. 【渝粤教育】广东开放大学 物业服务营销管理 形成性考核 (59)
  5. 中继(洪泛中继、定向中继)在无线通讯中的应用
  6. 7 Statistical estimation
  7. 权限丢失_不要让任何“账户权限”问题困扰你!
  8. 同步服务老是报错_悬而未决:MYSQL配置好主从同步后没有报错,但数据一直没有同步过来是什么原因? | 学步园...
  9. Pycharm Anaconda 安装dlib
  10. 红黑树操作详解——很形象的过程