首页 开发编程 正文

php 怎么写json

php接受json数据时有转义字符处理办法因为现在数据传输几乎都是以json格式去传,这个时候如果直接用json_decode函数处理接受的json数据,2、PHP如何判断字符串是否标准JSON?...

php 怎么写json,json去除转义字符方法?

php 接受json数据时有转义字符处理办法

因为现在数据传输几乎都是以json格式去传,而在将数据转化成json 的时候一般都是做转义处理,这个时候如果直接用json_decode函数处理接受的json数据,系统肯定是会报错的,因为转换不过来,而处理办法也很简单,就是将json数据中的转义字符去掉就可以了,php有一个函数stripslashes()就是干这个事情的,它的作用就是删除addslashes()函数添加的反斜杠;当然字符串中的反斜杠这个函数都是可以去除的。

PHP如何判断字符串是否标准JSON?

引言

在MYSQL 5.6及以下没有 JSON 这个字段类型的时候,我们还只能用字符串存储数组,对象,这些结构数据;甚至有直接将序列化的对象存库的,都是无奈之举。

编程中也时不时对接口进行json_encode / json_decode。那么如果所得的字符串不是标准的格式,有什么办法快速检测吗?

本文就来说一说。

学习时间

最快的办法,还是使用PHP内置的 json_decode 函数,对于此函数的参数和返回值,我们需要认真地分析。

该函数接受一个 JSON 编码的字符串并且把它转换为 PHP 变量。函数结构:

mixed json_decode( string $json[, bool $assoc = false[, int $depth = 512[, int $options = 0]]] )

除了第一个字符串类型的$json必填之外,其他都是选填。如果我们定制功能,需要后面的参数也指定。比如,解码的字符串解析为关联数组,那么就指定 $assoc = true。

考虑到兼容性的要求,$json 传入的字符串,必须是 UTF-8 编码格式。

我们试着编写一个助手函数,用于判断字符串是否标准的json格式:

function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); }

这个方法使用了2个函数,和1个常量。其中 json_decode 是对字符串解码暂且不说。json_last_error 函数,如果有返回值,则是 JSON 编码解码时最后发生的错误。

JSON_ERROR_NONE 是无错误,=0。该句判断没有错误则是标准格式,返回 true;否则返回 false。

深入学习

其实上面的代码对于 json 加解码过程中的错误判断还是比较粗糙的。有一位小哥不嫌繁琐,手动拼装了详细的错误处理函数,非常实用。

使用上述函数进行测试:

$json = '[{"user_id":13,"username":"stack"},{"user_id":14,"username":"over"}]'; $output = json_validate($json); print_r($output);

输出内容如下:

这是正常的情况,json 格式完全正确。我们再测试一个不是规范格式的字符串。

$json = '{background-color:yellow;color:#000;padding:10px;width:650px;}'; $output = json_validate($json); print_r($output);

输出错误信息:

Syntax error, malformed JSON.

万能的正则

跟字符串打交道,正则表达式几乎可以做一切你想要的结果。json 字符串也一样,据文档所说,使用正则表达式判断JSON格式,稳定有效,而且速度还很快。

下面这个正则表达式您拿小本本记好了,一模一样地抄下来用就可以了。

return !preg_match('/[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]/', preg_replace('/"(\\.|[^"\\\\])*"/', '', $json_string));

写在最后

如果考虑程序的可读性,和可维护性,使用 json_decode 函数的判断无疑更直观,大家也更熟悉。然而正则表达式所体现出的高效也是不容小觑的。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

返回json格式的数据怎么处理?

php 输出JSON格式,使用json_encode函数即可例如:得到结果:{"fruits":{"a":"orange","b":"banana","c":"apple"},"numbers":[1,2,3,4,5,6],"holes":{"0":"first","5":"second","6":"third"}}

php用curl的post方法传递json包的时候?

假设POST的数据为:{"data":"abc"}POST参数为:data同样以PHP为例,接受并处理请求的相关代码如下:

PHP后端很难返回规范的JSON数据吗?

PHP作为当下主流的脚本语言,因其简单高效的特点备受关注,基于PHP开发的项目也是很多的,可以说PHP是作为Web开发的首选开发语言。但是PHP本身是弱类型语言,所以在某些地方的支持度上也是存在一些问题的,比如对于JSON的处理就存在一定的差异化。

PHP弱类型可能会导致JSON返回时不够标准

PHP它是弱类型的脚本语言,所以在输出方面所有类型默认会被当成String输出。可能有PHP开发者不太理解这句话,举例来说:如果通过PHP从数据库中查询数据,那返回的数据其实都被当成了String类型,即使字段类型是int、double这类的也会被当成String处理。

在这种情况下,不同的开发者写出来的JSON可能就存在差异,比如:

{"name":"张三","age":22}

{"name":"张三","age":"22"}

另外在PHP环境下输出对象类型的字段时,也会出现问题,有些时候下会将{}返回成[],比如:

{"name":"张三","info":{}}

{"name":"张三","info":[]}

上面例举的这2个例子危害性很大,特别是作为API输出时会让调用方崩溃。

PHP后端如何规范返回JSON?

弱类型语言看似方便容错性高,其实更容易出现Bug,这也是一些安全系数要求高的项目并不会采用PHP这类弱类型语言去开发的原因。

那PHP在对JSON处理这块应该怎么做呢?我的建议就是定义好数据返回模板,然后进行数据填充生成JSON字符串再返回。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

本文转载自互联网,如有侵权,联系删除