php使用json

 这篇文章主要是说明 json_encode 使用时一个需要注意的细节,无论返回的是数组还是 json,都不代表这一定就是个错误的返回结果,当前端需要的数组时,数组就是正确的结果,反之亦然

在 ajax 横行的今天,json 顺理成章地成为了前后端交互一个极其重要的工具。对于 PHP 来说,通常使用 json_encode 方法将一个 PHP 组数,转换成前端可以解析的 json 字符串,这也是 PHP 手册上描述的内容,但事实是这样的吗?看看下面这段代码:
 
代码如下:
$a = array( 'Jack' , 'Sam' , 'Tom' );
echo json_encode( $a );
 
当 JavaScript 请求到上面的代码,PHP 将解析数组 $a 为 json 字符串并返回到前端,但事实上在前端拿到的返回结果却是一个数组。
代码如下:
[ "Jack" ,  "Sam" ,  "Tom" ]
 
这个结果对于前端来说也许并不是所期望的,对于 JavaScript 来说,数组和 json 的关系非常密切,甚至可以简单地把 json 理解为关联数组,但这并不意味着二者可以划等号,比如 json 没有 length 属性,也不能进行数字索引,json 是键值对,而 JavaScript 的数组严格说来是没有"键"的,这和 PHP 的差异比较大。那么为什么 json_encode 的返回结果是数组呢?
 
本文开头的 PHP 代码中的数组是严格意义上的数字索引数组,json_encode 方法在处理这样的数组的时候会返回数组字符串,它需要同时满足两个条件:1. 数字索引数组,2. 索引值从 0 开始。这意味着下面的代码也会返回同样的结果:
 
 
代码如下:
$b = array(
'0' => 'Jack',
'1' => 'Sam',
'2' => 'Tom'
);
echo json_encode( $b );
 
这两个条件的任意一个没有获得满足,那么 json_encode 方法才真正的返回 json 字符串:
代码如下:
$c = array(
'person-1' => 'Jack',
'person-2' => 'Sam',
'person-3' => 'Tom'
);
echo json_encode( $c );
 
这时前端得到的结果如下:
代码如下:
{
'person-1' : 'Jack',
'person-2' : 'Sam',
'person-3' : 'Tom'
};
 

时间: 2024-10-30 08:30:55

php使用json的相关文章

$.ajax传JSON数据到后台出现报错问题解决

 $.ajax传JSON数据到后台时总会出现一些错误,本文整理了一些注意事项,感兴趣的朋友可以参考下 代码如下: $.ajax({  url: "../Services.ashx",  type: "POST",  //data: { 'data': { 'typename': JSON.stringify(typename) }, 'operationType': '2' },  data: { 'data': typename, 'operationType':

说说JSON和JSONP,也许你会豁然开朗,含jQuery用例

前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX.  说到AJAX就会不可避免的面临两个

解决一个Django Rest Framework的JSON输出的小问题

  在服务器升级迁移过程中,遇到一个见了鬼的问题. 同样的一个API输出,在本机测试时和生产中一台机器上的输出为纯数据的json格式. 而在另一台生产机器上却为加了统计和跳转信息的另一种json格式. 由于前端用了vue.js作了数据的加载,如果同样的代码,那获取json中对象的信息显然就会发生问题. 解决BUG的时间来不及,也无法深入调试.可用以下代码,判断json中是否有存在对象来进行对象的赋值,可解决这个输出问题. 以后找时间还是深入研究一下这个DRF的输出机制吧. //此处兼容djang

echarts3.0 引用json地图

问题描述 echarts3.0 引用json地图 echarts3.0有两个引入地图的方式,http://echarts.baidu.com/download-map.html 我用js的方法引入成功了,但是用json的方法就是看不到地图(火狐也看不到),空白一片 以下是我的目录结构 F:MyEcharts3.0 -china.js -china.json -echarts.js -echarts.min.js -jquery.min.js -macarons2.js -MyTest.html

c++-jsoncpp如何判断json格式?

问题描述 jsoncpp如何判断json格式? 我用的是jsoncpp这个库,在我解析json字符串时,我觉得我应该先判断一下字符串是否是json格式,可是当我输入的字符串全是数字时,就报错了,错误为"type_ == nullValue || type_ == objectValue",求大神指点... 解决方案 Json:Json格式.Jsoncpp简介 解决方案二: 就问题论问题....首先你说的"判断字符串是否为json格式",我觉得是没有必要的,为什么呢?

sql-ASP读取SQL数据表 生成多记录JSON 具体代码如何写 求教大神

问题描述 ASP读取SQL数据表 生成多记录JSON 具体代码如何写 求教大神 数据表是user 主键是m_Name <%response.ContentType=""text/json"" response.write request(""jsoncallback"")%>([{""m_Name"":""*依旧""n_Name&quo

ios-转换后JSON响应获取空值

问题描述 转换后JSON响应获取空值 转换为NSArray后,JSOn响应得到的是空值 JSON Response : JSON Log : [ { "0": "41", "intid": "41", "1": "u8a00u3046", "varfirstname": "u8a00u3046", "2": "test

MDataTable属性RecordsAffected新应用:WebService与Json交互的记录总数

一:事出总有因:   1:需要来源: 最近有网友给我问了一个需求功能,大体需要功能如下:  1:有一台服务器,以WebService或WCF方式提供数据. 2:有客户端(Web或Winform),调用远程WebService或WCF的数据,然后绑定显示表格数据,关键还需要带有分页功能. 2:解决方案:  由于网友使用 CYQ.Data ,我给出了以下建议: 1:WebService 端:通过MAction,查询出表(MDataTable),再调用ToJson返回json输出. 2:客户端:通过调

JSON介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等). 这些特性使J

android 环信json解析是怎么解析的

问题描述 android 环信json解析是怎么解析的 [msg{from:sb111111, to:sb222222 body:txt:"a"]这种的json是怎么写的,我用的是fastjson,所以我想看一下实体类的代码,求求!!! 解决方案 本文采用三种方法,解析Json文件,具体在代码那个都有解析 不多说,贴代码: ? ?// SampleActivity.java package com.yline.jsonparse; import android.app.Activity