JSON在PHP中的应用介绍

从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编码的时候,这一点要特别注意。

二、索引数组和关联数组

PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。
由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。
比如,现在有一个索引数组


代码如下:

  $arr = Array('one', 'two', 'three');
  echo json_encode($arr);

结果为:
  ["one","two","three"]
如果将它改为关联数组:
  $arr = Array('1′=>'one', '2′=>'two', '3′=>'three');
  echo json_encode($arr);
结果就变了:
  {"1″:"one","2″:"two","3″:"three"}
注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写
  json_encode( (object)$arr );
或者
  json_encode ( $arr, JSON_FORCE_OBJECT );

三、类(class)的转换

下面是一个PHP的类:


代码如下:

  class Foo {
    const ERROR_CODE = '404′;
    public $public_ex = 'this is public';
    private $private_ex = 'this is private!';
    protected $protected_ex = 'this should be protected';
    public function getErrorCode() {
      return self::ERROR_CODE;
    }
  }

现在,对这个类的实例进行json转换:


代码如下:

  $foo = new Foo;
  $foo_json = json_encode($foo);
  echo $foo_json;

输出结果是
  {"public_ex":"this is public"}
可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。

四、json_decode()

该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:


代码如下:

  $json = '{"foo": 12345}';
  $obj = json_decode($json);
  print $obj->{'foo'}; // 12345

通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:
  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
  var_dump(json_decode($json));
结果就是生成一个PHP对象:


代码如下:

  object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
  }

如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:
  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
  var_dump(json_decode($json),true);
结果就生成了一个关联数组:


代码如下:

  array(5) {
     ["a"] => int(1)
     ["b"] => int(2)
     ["c"] => int(3)
     ["d"] => int(4)
     ["e"] => int(5)
  }

五、json_decode()的常见错误

下面三种json写法都是错的,你能看出错在哪里吗?


代码如下:

  $bad_json = "{ 'bar': 'baz' }";
  $bad_json = '{ bar: "baz" }';
  $bad_json = '{ "bar": "baz", }';

对这三个字符串执行json_decode()都将返回null,并且报错。
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。
var_dump(json_decode("Hello World")); //null

(0)

相关推荐

  • 使用JSON实现数据的跨域传输的php代码

    后台profile.php代码: 复制代码 代码如下: <?php $arr = array( 'firstname' => iconv('gb2312', 'utf-8', '非诚'), 'lastname' => iconv('gb2312', 'utf-8', '勿扰'), 'contact' => array( 'email' =>'fcwr@jb51.net', 'website' =>'http://www.jb51.net', ) ); //将一个数组JS

  • PHP6 先修班 JSON实例代码

    它是基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集 JSON 主要利用了成對的 {} 來包住各個object(物件),用成對的 [] 來包各個array(陣列), 用成對的 "" 來包住各字串,用逗號來區隔各變數而資料型態有 string, number, array, object 下面簡單的JSON格式,敘述了一個 object json 擁有一個成員變數,這

  • 有关JSON以及JSON在PHP中的应用

    JSON 基础 简 单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序.这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构.例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表. 简单 JSON 示例 按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:

  • PHP JSON 数据解析代码

    使用此代码可以顺利解析人人连接网站POST获取的数据. 复制代码 代码如下: $json_string='{"id":1,"name":"jb51","email":"admin@jb51.net","interest":["wordpress","php"]} '; $obj=json_decode($json_string); echo $ob

  • php 无限级数据JSON格式及JS解析

    Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~) 复制代码 代码如下: //--查询用户下线信息,返回JSON,用于flash if(!empty($_GET['action'])&&!empty($_GET['invite'])){ //固定参数请求才会返回信息 if($_GET['action']=='getinfo'&&$_GET['invite']==1){ //数据实体,一个实体类 class UcInvi

  • php操作JSON格式数据的实现代码

    知识点: 1.JSON数据格式介绍 2.对数据编码成JSON格式 3.对JSON数据进行解码,并操作 JSON数据格式表示方式如下: 复制代码 代码如下: { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName&qu

  • JSON在PHP中的应用介绍

    从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":

  • 关于JSON以及JSON在PHP中的应用技巧

    JSON 基础 简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序.这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构.例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表. 简单 JSON 示例 按照最简单的形式,可以用下面这样的 JSON 表示名称/值对: {

  • Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

  • JSON在Java中的相互转换示例详解

    什么是JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. JSON采用完全独立于语言的文本格式,而且很多语言都提供了对json的支持(包括C, C++, C#, Java, JavaScript, Perl, Python等). 这样就使得JSON成为理想的数据交换格式. 数据交换格式,是指客户端和服务器之间通信,传递数据时,数据使用的格式是json JSON在java中的使用 json在ja

  • 详解json在SpringBoot中的格式转换

    @RestController自动返回json /** * json 三种实现方法 * 1 @RestController自动返回json */ @GetMapping("/json") public Student getjson() { Student student = new Student("bennyrhys",158 ); return student; } @ResponseBody+@Controller 组合返回json //@RestContr

  • springboot2.1.7去除json返回字段中为null的字段

    一般我们会设置返回VO对象的类型为 @Data public class ResponseVO<T> { private Integer status; private String msg; private T data; public ResponseVO(Integer status, String msg) { this.status = status; this.msg = msg; } } 但如果不需要返回泛型T,即泛型T为null就会出现以下字段 { "status&q

  • 深入浅析JSON在java中的使用

    一.javaBean和json的互转 JavaBean类 public class Person { private Integer id; private String name; public Person() { } public Person(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer

  • 有关Java中的BeanInfo介绍

    目录 1.JavaBean介绍 2.JavaBean的自省 3.JavaBean内省工具Introspector 4.JavaBean内省结果BeanInfo 5.内省结果BeanInfo的类型 6.Spring的BeanUtils.copyProperties 7.BeanUtils并发问题优化 8.BeanUtils Setter属性识别优化 9.BeanUtils 性能测试 1.JavaBean介绍 维基百科JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象

  • js读取json文件片段中的数据实例

    在html中利用js读取动态网站从服务器端返回的数据进行显示 1.js.html 页面 需要引入 执行jquery的js文件 <HTML> <HEAD> <META name=Generator content=EditPlus> <META name=Author content=""> <META name=Keywords content=""> <META name=Description c

随机推荐