php操作json

什么是JSON

  • 1 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
  • 2 很容易的进行阅读和编写。
  • 3 方便了机器进行解析和生成。
  • 4 采用完全独立于程序语言的文本格式。

JSON基于两种结构

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构。

对象:

对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构。

数组:

数组在js中是中括号“[]”括起来的内容,数据结构为["java","javascript","php",...]。

“名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)

值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)

体现形式

对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

字符串(string) 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

JSON的数值没有使用八进制与十六进制格式。

可以在任意标记之间添加空白。

PHP对变量进行 JSON 编码

函数:json_encode()

普通方式:

$arr = [
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'd' => 4,
    'e' => 5
];
echo json_encode($arr);

对象转json:

$obj = new StdClass();
$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}

数组转对象:

PHP 5.3.3 +

$arr = [
    1,
    2,
    3
];
echo json_encode($arr);
// [1,2,3]
echo json_encode((object)$arr);
// {"0":1,"1":2,"2":3}
echo json_encode($arr, JSON_FORCE_OBJECT);
// {"0":1,"1":2,"2":3}

输出中文JSON:

以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 PHP 5.4.0 +

$arr = [
    '张三',
    '李四',
    '王五'
];
echo json_encode($arr);
// ["\u5f20\u4e09","\u674e\u56db","\u738b\u4e94"]
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
// ["张三","李四","王五"]

输出中文JSON对象

//中文,json对象
$arr = [
    '张三',
    '李四',
    '王五'
];
echo json_encode($arr);
// ["\u5f20\u4e09","\u674e\u56db","\u738b\u4e94"]
echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
// {"0":"张三","1":"李四","2":"王五"}

浮点值类型保持:

$arr = [
    12.3,
    99.99,
    100.0
];
echo json_encode($arr);
// [12.3,99.99,100]
echo json_encode($arr, JSON_PRESERVE_ZERO_FRACTION);
// [12.3,99.99,100.0]

其他的掩码:

JSON_HEX_TAG (integer)
所有的 < 和 > 转换成 \u003C 和 \u003E。  PHP 5.3.0 +
JSON_HEX_AMP (integer)
所有的 & 转换成 \u0026。 PHP 5.3.0 +
JSON_HEX_APOS (integer)
所有的 ' 转换成 \u0027。 PHP 5.3.0 +
JSON_HEX_QUOT (integer)
所有的 " 转换成 \u0022。 PHP 5.3.0 +
JSON_NUMERIC_CHECK (integer)
将所有数字字符串编码成数字(numbers)。 PHP 5.3.3 +
...

服务端代码

输出JSON到JavaScript程序;

header('Content-type:text/json');  
或者
header('content-type:application/json;charset=utf8');    

服务端设置 header 头允许AJAX跨域:

header('Content-Type: text/javascript; charset=utf8');
//如果需要设置允许所有域名发起的跨域请求,可以使用通配符 *
header('Access-Control-Allow-Origin: http://www.test.com/');
//表明该响应的有效时间为 86400 秒,也就是 24 小时。
header('Access-Control-Max-Age: 86400 ');
//服务器允许客户端使用指定方法发起请求
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

JSON验证:

function isValidJson($strJson) { 
    json_decode($strJson); 
    return (json_last_error() === JSON_ERROR_NONE); 
} 

json解码:

函数:json_decode()

解码json:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

//解码json
var_dump(json_decode($json));
/*
object(stdClass)[1]
  public 'a' => int 1
  public 'b' => int 2
  public 'c' => int 3
  public 'd' => int 4
  public 'e' => int 5
*/

解码为数组:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

//转成数组
var_dump(json_decode($json, true));
/*
array (size=5)
  'a' => int 1
  'b' => int 2
  'c' => int 3
  'd' => int 4
  'e' => int 5
 */

大整型数值:

JSON_BIGINT_AS_STRING, 用于将大整数转为字符串而非默认的float类型。

$json = '{"number": 12345678901234567890}';
print_r(json_decode($json));
/*
 stdClass Object
(
    [number] => 1.2345678901235E+19
)
 */

print_r(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
/*
stdClass Object
(
    [number] => 12345678901234567890
)
 */

你可能感兴趣的:(php操作json)