欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-10 18:14:19
...
客户端传递的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!