当前位置:Gxlcms > PHP教程 > 将JSON数据保存到SESSION出现问题

将JSON数据保存到SESSION出现问题

时间:2021-07-01 10:21:17 帮助过:6人阅读

客户端传递的JSON数据:
[    {        "category_id": 0,        "category_products": [            [                {                    "para_name": "品牌",                    "para_val": "海飞丝"                },                {                    "para_name": "生产日期",                    "para_val": "2015-08-11"                }            ],            [                {                    "para_name": "品牌",                    "para_val": "新丝路"                },                {                    "para_name": "生产日期",                    "para_val": "2015-08-11"                },                {                    "para_name": "适用发质",                    "para_val": "干枯、毛躁、油性头发"                }            ]        ]    },    {        "category_id": 1,        "category_products": [            [                {                    "para_name": "品牌",                    "para_val": "潘婷"                },                {                    "para_name": "生产日期",                    "para_val": "2015-06-11"                }            ]        ]    }]

通过序列化和反序列化后取出来的数据就和上面的不一样了!我该怎么办?这是在PHP中反序列化后取出来的数据:
a: 2: {    i: 0;O: 8: "stdClass": 2: {        s: 11: "category_id";i: 0;s: 17: "category_products";a: 2: {            i: 0;a: 2: {                i: 0;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 6: "品牌";s: 8: "para_val";s: 9: "海飞丝";                }i: 1;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 12: "生产日期";s: 8: "para_val";s: 10: "2015-08-11";                }            }i: 1;a: 3: {                i: 0;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 6: "品牌";s: 8: "para_val";s: 9: "新丝路";                }i: 1;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 12: "生产日期";s: 8: "para_val";s: 10: "2015-08-11";                }i: 2;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 12: "适用发质";s: 8: "para_val";s: 30: "干枯、毛躁、油性头发";                }            }        }    }i: 1;O: 8: "stdClass": 2: {        s: 11: "category_id";i: 1;s: 17: "category_products";a: 1: {            i: 0;a: 2: {                i: 0;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 6: "品牌";s: 8: "para_val";s: 6: "潘婷";                }i: 1;O: 8: "stdClass": 2: {                    s: 9: "para_name";s: 12: "生产日期";s: 8: "para_val";s: 10: "2015-06-11";                }            }        }    }}


回复讨论(解决方案)

你的第二段数据是 序列化的

你的第二段数据是 序列化的


试了,确实是没有反序列化就取出来就会这样子。
不过我想反序列化后再次输出给客户端,通过Ajax 返回json,我再次json_encode 反序列化的数据,通过console.log出来变成[object object] 了,这是正常的吗?

我不知道你的应用场景
你的第一段数据是 json 串,并不会序列化成第二段数据

console.log出来变成[object object] 是正确的

看到你有stdclass 说明你是对返回的json进行了decode 后面那个json_decode($json,1); true的参数加上
当然 后面urlcode什么的就看你自己的了

ps 为什么要多此一举decode encode 直接序列化反序列好了

我不知道你的应用场景
你的第一段数据是 json 串,并不会序列化成第二段数据

console.log出来变成[object object] 是正确的


我在服务端获取原始JSON串后,通过json_decode将JSON串转化成数组对象,然后序列化这个数组对象,赋值给$_SESSION变量。之所以这么做,因为我的数据是两级,然后数目不固定。类似百度经验那样的后台录入界面。所以我通过json进行前后台数据传递,在最终发布内容之前,先将数据暂存在SESSION中,任何增删改查都不用经过数据库(这种方法试过,因为数据关联为两层结构,增删改查非常困难)。
不知我这种做法是否恰当,还有更好的解决方案?

那也没必要序列化,直接存入 session 就行了

我不知道你的应用场景
你的第一段数据是 json 串,并不会序列化成第二段数据

console.log出来变成[object object] 是正确的



前端界面操作截图



请问还有更好的解决办法吗?


那也没必要序列化,直接存入 session 就行了



GOOD!果然不需要序列化,多此一举。Thank You!

人气教程排行