将JSON数据保存到SESSION出现问题
程序员文章站
2022-05-20 15:57:57
...
客户端传递的JSON数据:
通过序列化和反序列化后取出来的数据就和上面的不一样了!我该怎么办?这是在PHP中反序列化后取出来的数据:
试了,确实是没有反序列化就取出来就会这样子。
不过我想反序列化后再次输出给客户端,通过Ajax 返回json,我再次json_encode 反序列化的数据,通过console.log出来变成[object object] 了,这是正常的吗?
我在服务端获取原始JSON串后,通过json_decode将JSON串转化成数组对象,然后序列化这个数组对象,赋值给$_SESSION变量。之所以这么做,因为我的数据是两级,然后数目不固定。类似百度经验那样的后台录入界面。所以我通过json进行前后台数据传递,在最终发布内容之前,先将数据暂存在SESSION中,任何增删改查都不用经过数据库(这种方法试过,因为数据关联为两层结构,增删改查非常困难)。
不知我这种做法是否恰当,还有更好的解决方案?
前端界面操作截图
请问还有更好的解决办法吗?
GOOD!果然不需要序列化,多此一举。Thank You!
[ { "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!
下一篇: 画透视该如何开始?背景透视画法步骤