ホームページ >バックエンド開発 >PHPチュートリアル >JSON データを SESSION に保存する際の問題

JSON データを SESSION に保存する際の問題

WBOY
WBOYオリジナル
2016-06-23 13:28:441437ブラウズ

クライアントから渡される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";                }            }        }    }}


ディスカッションへの返信 (解決策)

2 番目のデータはシリアル化されています

あなたの最初の 2 番目のデータはシリアル化


試してみましたが、デシリアライズせずに取り出すと確かにこんな感じです。
しかし、デシリアライズ後に再度クライアントに出力し、Ajax 経由で json を返したいのですが、デシリアライズされたデータを再度 json_encode すると、console.log を通じて [object object] になります。これは正常ですか?

アプリケーションのシナリオがわかりません
最初のデータは JSON 文字列であり、2 番目のデータにシリアル化されません

console.log の出力は [object object] になりますが、これは正しいです

なるほどstdclass があるということは、返された json をデコードしたことを意味します。 json_decode($json,1); true パラメーターを追加します。 シーケンスの準備ができました



アプリケーションのシナリオがわかりません

最初のデータは json です文字列であり、2 番目のデータにはシリアル化されません

console.log の出力は [object object] になりますが、これは正しいです

サーバーから元の JSON 文字列を取得した後、JSON 文字列を配列に変換しますjson_decode を通じてオブジェクトを取得し、配列オブジェクトをシリアル化して $_SESSION 変数に割り当てます。その理由は、私のデータが 2 レベルであり、数値が固定されていないためです。 Baidu Experience に似たバックグラウンド入力インターフェイス。そのため、最終的にコンテンツを公開する前に、データを一時的に SESSION に保存し、追加、削除、変更、クエリをデータベースを経由する必要はありません (私はこの方法を試しました)。データの関連付けは 2 層構造であるため、データベースを介して追加、削除、変更、クエリを実行する必要はありません。
私のアプローチが適切かどうかわかりません。より良い解決策はありますか?



シリアル化する必要はありません。セッションに直接保存するだけです

アプリケーションのシナリオがわかりません

最初のデータは JSON 文字列であり、2 番目のデータにはシリアル化されません

コンソール。ログが [オブジェクト オブジェクト] になるのは正しいです


フロントエンド インターフェイス操作のスクリーンショット




より良い解決策はありますか?





シリアル化する必要はなく、セッションに直接保存するだけです

良いですね!当然のことながら、シリアル化は不要であり、余分です。ありがとうございます!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。