二次json_encode() 和二次 json_decode()

之前没有留意过这两个函数,昨天群里有人问起。发现如下事情。

header("Content-type:text/html;charset=utf-8");
$arr = array(‘a‘=>1,‘b‘=>2);
$str = json_encode($arr);
var_dump($str);
var_dump(json_encode($str));
$str_1 = json_encode($str);
var_dump($str_1);

$arr_1 = json_decode($str_1);
var_dump($arr_1);
$obj = json_decode($arr_1);
var_dump($obj);
echo $obj->a;

结果:

string ‘{"a":1,"b":2}‘ (length=13)
string ‘"{\"a\":1,\"b\":2}"‘ (length=19)
string ‘"{\"a\":1,\"b\":2}"‘ (length=19)
string ‘{"a":1,"b":2}‘ (length=13)
object(stdClass)[1]
  public ‘a‘ => int 1
  public ‘b‘ => int 2
1

用json_encode() 二次或者N次 将会把之前转好的json字符串进行转义。

来看下json_encode()的api

string json_encode ( mixed $value [, int $options = 0 ] )

这说第一个参数是混合类型的,除了resource 其余都可以。 后面参数。不想偏离主题。

因为第一次调用json_encode()的时候传的是数组,第二次调用json_encode()方法的时候参数是字符串。

用json_decode();

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

api说只能放json字符串。

但是我们进行第二次json_decode 的时候传入的参数,其实是一个数组了。返回给我们了一个对象。

时间: 2024-10-13 01:47:01

二次json_encode() 和二次 json_decode()的相关文章

二维图像到二维屏幕的投影 用例

说明 在默认的2D渲染中,渲染的X,Y轴的范围都是从[-1, 1],屏幕的中心点(0,0),所以鼠标点击的坐标,必须转换成世界地理坐标系,在2D环境下,默认Z轴坐标为0.0 假设屏幕宽800,高4800 屏幕坐标 地理坐标 左上角 0,0 -1,1 左下角  0,480 -1,-1 右上角  800,0           1,1 右下角  800,480         1,-1 现在通过gluOrtho2D函数将二维图像到二维屏幕上的投影,将坐标移动到左下角,方向刚好和屏幕坐标的Y轴相反 代

二维数组及二维指针的传递及一些思考

二维数组和二位指针在程序知识中是一个难点,往往会将人弄得头昏眼花.总结一下这个难点的相关问题. 二维数组,顾名思义就是数组的数组:二维指针是指针的指针.首先,我们来看看二维数组和二维指针等价的问题. 在<C专家编程>10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!) 数组和指针参数是如何被编译器修改的? "数组名被改写成一个指针参数"规则并不是递归定义的.数组的数组会被改写成"数组的指针",而不是"指针的指针":

【C语言探索之一】二维数组,二维数组名的意义

1.一维数组 一维数组名,代表两个(1)代表整个数组(虽然谭老爷子的书上说不能,但是只是那个情境下) (2)代表首地址 2.二维数组 想到二维数组在指针方面的理解很是麻烦,所以我自己想了一种理解方式,如下图所示 二维数组名的意义感觉很难受,所以自己来探索下其代表些什么 下面是我的代码和结果 可以看到他们四个的值是一模一样的,但是意义不一样的 1.b数组名,他是指向整个数组的指针, 2.*b是数组第一维的首地址,相当于b[0] 3.&b目的是为了看出数组名的地址,最后结果显而易见,他的地址也是这个

二 Flask Project 实战 二

5 templates {{ and }} is an expression{% and %} denotes a control flow statement like if and for blocks defined here that will be overridden in the other templates{% extends 'base.html' %} tells Jinja that this template should replace the blocks from

Delphi Mercadopago支付【支持支持获取账户信息和余额、创建商店,商店查询、创建二维码、二维码查询、创建订单、订单查询、订单退款等功能】

Delphi Mercadopago支付下载 [Delphi Mercadopago支付]支持 支持支持获取账户信息和余额.创建商店,商店查询.创建二维码.二维码查询.创建订单.订单查询.订单退款等功能 原文地址:https://www.cnblogs.com/zhimamaigua/p/11251646.html

关于json_encode一个二维数组,返回一个数组对象还是对象对象

$users = array( '1'=>array('id'=>1,'age'=>'1'), '2' => array('id'=>2,'age'=>'2'), 这个二维数组的索引值若果是从1开始,返回的就是对象对象 <?php $users = array( array('id'=>1,'age'=>'1'), array('id'=>2,'age'=>'2'), array('id'=>3,'age'=>'3'), arr

c++ 动态分配二维数组 new 二维数组

#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //建立一个16行5列的数组 int **p = new int*[16];//分配堆内存16个 int* for(int i = 0;i < 16;i++)//分配堆内存给每一个int* p[i] = new int[5]; //给这个数组赋值 int k = 0; f

微信公众号二次开发(二)-注册新浪SAE

新浪SAE:Sina App Engine是新浪提供的云服务,对个人提供免费的Web应用/业务开发托管.运行平台.我们就用它来作为我们的开发服务器测试环境. 注册新浪云http://sinacloud.com/ 创建SAE应用,使用PHP作为开发语言 填写运营者身份信息 进入后台 在后台查看总揽 该服务器我们就将利用它作为我们的二次开发服务器进行配置. 欢迎微信扫一扫或搜索关注我的"Windows自动化运维"公众号,我会每天定期发布Windows自动化运维的相关知识供大家讨论研究. 本

shopnc二次开发(二)

一般来说二次开发,多数就是修改界面和增加功能这两个需求 先说修改界面 mvc 架构的程序,在界面这里,基本就是调用数据. 常见的界面数据构架有三种 1.是业务端或者是控制端数据驱动界面,基本上是后台输出啥数据,界面表现啥数据.这样麻烦的地方在于如果要更换模板的话动刀会动的比较大,除非没有更换模板的需求.如果不修改控制端的数据的话,那么界面设计这里受到的限制就比较多. 2.是界面驱动数据,界面自定义调用数据,多数的 cms 基本都是这样搞的,通过标签或者定义个通用的 php 调用数据函数来获取数据