2016-09-16 5 views
0

jsonデータのエンコードとデコードに問題があります。私はPHPで読み込むとき特殊文字( "\")を使用して文字列をjson_decodeにする方法

{\\"front\\":{\\"0\\":{\\"type\\":\\"text\\",\\"width\\":\\"55px\\",\\"height\\":\\"27px\\",\\"top\\":\\"151px\\",\\"left\\":\\"86px\\",\\"zIndex\\":\\"1\\",\\"svg\\":\\"<svg width=\\\\\\"54.9375\\\\\\" height=\\\\\\"27.09375\\\\\\" viewBox=\\\\\\"0 0 54.9375 27.09375\\\\\\" xmlns=\\\\\\"http:\/\/www.w3.org\/2000\/svg\\\\\\" xmlns:xlink=\\\\\\"http:\/\/www.w3.org\/1999\/xlink\\\\\\"><g id=\\\\\\"0.7882792934370437\\\\\\"><text fill=\\\\\\"#FF0000\\\\\\" stroke=\\\\\\"none\\\\\\" stroke-width=\\\\\\"0\\\\\\" stroke-linecap=\\\\\\"round\\\\\\" stroke-linejoin=\\\\\\"round\\\\\\" x=\\\\\\"\\\\\\" y=\\\\\\"\\\\\\" text-anchor=\\\\\\"start\\\\\\" font-size=\\\\\\"24px\\\\\\" font-family=\\\\\\"arial\\\\\\" data-textcurve=\\\\\\"1\\\\\\" data-itemzoom=\\\\\\"1 1\\\\\\" data-textspacing=\\\\\\"0\\\\\\"><textPath xmlns:xlink=\\\\\\"http:\/\/www.w3.org\/1999\/xlink\\\\\\" xlink:href=\\\\\\"http:\/\/138.68.62.219\/Buy-Hanes-T-shirt-PC61LS#textPath-item-0\\\\\\"><tspan dy=\\\\\\"0\\\\\\">Hello<\/tspan><\/textPath><\/text><\/g><defs><path id=\\\\\\"textPath-item-0\\\\\\" d=\\\\\\"M 0.125 22.117808976867764 A 3093.9720937064453 3093.9720937064453 0 0 1 54.124314613414626 22.117808976867764\\\\\\"><\/path><\/defs><\/svg>\\",\\"rotate\\":0,\\"text\\":\\"Hello\\",\\"color\\":\\"#FF0000\\",\\"fontFamily\\":\\"arial\\",\\"align\\":\\"center\\",\\"outlineC\\":\\"none\\",\\"outlineW\\":0}} 

:私はデータ型「JSON」でクエリを送信JSでは、それは次のようになります。私はMySQLでセルに保存

{\"front\":{\"0\":{\"type\":\"text\",\"width\":\"55px\",\"height\":\"27px\",\"top\":\"151px\",\"left\":\"86px\",\"zIndex\":\"1\",\"svg\":\"<svg width=\\\"54.9375\\\" height=\\\"27.09375\\\" viewBox=\\\"0 0 54.9375 27.09375\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><g id=\\\"0.7882792934370437\\\"><text fill=\\\"#FF0000\\\" stroke=\\\"none\\\" stroke-width=\\\"0\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" x=\\\"\\\" y=\\\"\\\" text-anchor=\\\"start\\\" font-size=\\\"24px\\\" font-family=\\\"arial\\\" data-textcurve=\\\"1\\\" data-itemzoom=\\\"1 1\\\" data-textspacing=\\\"0\\\"><textPath xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xlink:href=\\\"http://138.68.62.219/Buy-Hanes-T-shirt-PC61LS#textPath-item-0\\\"><tspan dy=\\\"0\\\">Hello</tspan></textPath></text></g><defs><path id=\\\"textPath-item-0\\\" d=\\\"M 0.125 22.117808976867764 A 3093.9720937064453 3093.9720937064453 0 0 1 54.124314613414626 22.117808976867764\\\"></path></defs></svg>\",\"rotate\":0,\"text\":\"Hello\",\"color\":\"#FF0000\",\"fontFamily\":\"arial\",\"align\":\"center\",\"outlineC\":\"none\",\"outlineW\":0}} 

その後、それはこのようになります私は($tmp=$products[0]['design_file']; print_r($tmp);)を参照してください何このデータ:

"{\\"front\\":{\\"0\\":{\\"type\\":\\"text\\",\\"width\\":\\"55px\\",\\"height\\":\\"27px\\",\\"top\\":\\"151px\\",\\"left\\":\\"86px\\",\\"zIndex\\":\\"1\\",\\"svg\\":\\"<svg width=\\\\\\"54.9375\\\\\\" height=\\\\\\"27.09375\\\\\\" viewBox=\\\\\\"0 0 54.9375 27.09375\\\\\\" xmlns=\\\\\\"http:\/\/www.w3.org\/2000\/svg\\\\\\" xmlns:xlink=\\\\\\"http:\/\/www.w3.org\/1999\/xlink\\\\\\"><g id=\\\\\\"0.7882792934370437\\\\\\"><text fill=\\\\\\"#FF0000\\\\\\" stroke=\\\\\\"none\\\\\\" stroke-width=\\\\\\"0\\\\\\" stroke-linecap=\\\\\\"round\\\\\\" stroke-linejoin=\\\\\\"round\\\\\\" x=\\\\\\"\\\\\\" y=\\\\\\"\\\\\\" text-anchor=\\\\\\"start\\\\\\" font-size=\\\\\\"24px\\\\\\" font-family=\\\\\\"arial\\\\\\" data-textcurve=\\\\\\"1\\\\\\" data-itemzoom=\\\\\\"1 1\\\\\\" data-textspacing=\\\\\\"0\\\\\\"><textPath xmlns:xlink=\\\\\\"http:\/\/www.w3.org\/1999\/xlink\\\\\\" xlink:href=\\\\\\"http:\/\/138.68.62.219\/Buy-Hanes-T-shirt-PC61LS#textPath-item-0\\\\\\"><tspan dy=\\\\\\"0\\\\\\">Hello<\/tspan><\/textPath><\/text><\/g><defs><path id=\\\\\\"textPath-item-0\\\\\\" d=\\\\\\"M 0.125 22.117808976867764 A 3093.9720937064453 3093.9720937064453 0 0 1 54.124314613414626 22.117808976867764\\\\\\"><\/path><\/defs><\/svg>\\",\\"rotate\\":0,\\"text\\":\\"Hello\\",\\"color\\":\\"#FF0000\\",\\"fontFamily\\":\\"arial\\",\\"align\\":\\"center\\",\\"outlineC\\":\\"none\\",\\"outlineW\\":0}} 

私が行う場合は、この:

$tmp=$products[0]['design_file']; 
$info=json_decode($tmp); 
print_r($info); 

それは私にを与えます。 どうすれば配列を元通りに戻すことができますか?送信

Javascriptを:PHP

if (isset($this->request->post['option'])) { 
      $option = array_filter($this->request->post['option']); 

パスで

jQuery(document).triggerHandler("before.addtocart.design", datas); 
var finaldata=JSON.stringify(datas); 
    jQuery.ajax({ 
    url: 'index.php?route=checkout/cart/add', //URL TO CONTROL FUNCTION add() 
    type: 'post', 
    data: 'product_id=' + product_id + '&quantity=' + q+"&option['options']="+finaldata, 

読むには、あなたが不正な形式のJSONデータを格納することがあります

$data['products'][] = array(
       'design_file'=>$product['design_file'], 
... 
$tmp=$products[0]['design_file']; 
+0

あなたの問題は、実際にMySQL内で必要なコンテンツを保存するのではなく、何かをエスケープすることです。だから問題は:_why_?あなたのコードが必要です... _症状を修正しようとしないで、原因を修正してください!_ – arkascha

+0

最初にこのデータを送信していますか? –

+0

@arkascha @ rocket-hazmat .okその他js 'var finaldata = JSON.stringify(datas); データ: 'product_id =' + product_id + '&quantity =' + q + '&オプション[' options '] = "+最終データ、// // ajax body' mysqlに保存されています ' if(isset($ this-> {} {\t \t \t \t $ option = array_filter($ this-> request-> post ['option']); //さらにスタンドアートのオープンコード ' thatsの読み方: '$データ[ '製品'] [] =配列( \t \t \t \t \t 'design_file' => $物[ 'design_file'] TPLファイル' $ TMP = $製品の ' [0] [' design_file ']; ' – tttaaabbb

答えて

0

表示します。これらのページ(右PHPのドキュメントからいくつかの有用なリソース)を見てみましょう:

PS:2番目のリンクはjson_encodeで使用optionsパラメータに関連しています。あなただけの以下の例のように、それらの値にあなたが望むように構成することがあります:ところで

$obj = [ 
    "prop1" => 123, 
    "prop2" => [ 
    "prop2.1" => "Value A", 
    "prop2.2" => [1, 2, 3, 4, 5] 
    ] 
]; 

$jsonContent = json_encode($obj, JSON_PRETTY_PRINT | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); 

、あなたはまだ$.ajax関数呼び出しのcontentType: 'application/json'設定を使用してサーバーにJavaScriptのオブジェクトを送信することができます。これにより、HTTPリクエストからのリクエストデータをPHPオブジェクトとして扱うことができます。

PHPを使用してJSONコンテンツをシリアル化し、要求属性から直接文字列をバイパスするのではなく、データベースに格納します。

+0

私はあなたが言ったように、それはうまくいっていますが、最初のlvlのためにここにはまだ残り、私は全オブジェクトを解読できません '$ tmp = $ products [ 0] ['design_file']; $ info = json_decode($ tmp、true); // WORKS $ info = json_decode(stripslashes($ info ['options']); // DOESNT' – tttaaabbb

+0

あなたは正しいトラブルでしたjsonのラッピングデータに興味があれば 'var_data = {'product_id':product_id、 'quantity':q、 'option':{'options':datas // JSON.stringify(datas)}' – tttaaabbb

0

何かが実際にここで混乱しています。最初のJSONは無効です。どういうわけか、すでに余分なスラッシュがあります。

ここで確認してください:Issue with JSON.stringify adding a extra \ and "" to my Json object。多分ここに :JSON.stringify escaping without need

も(それが}}} 3決算括弧でなければなりません)JSON文字列の一番最後で}が不足しています。

第2に、あなたがそれをエスケープしたデータベースに挿入する前に推測しています(それで、スラッシュがどのように増えたのか)。htmlspecialchars()でした。これを考慮すると、それをオブジェクトでどのように解析できるかということです。

$info = json_decode(stripslashes(htmlspecialchars_decode($tmp.'}'))); 
+0

{'product_id':product_id、 '数量':q、 'オプション':{ 'options' {''おそらく私のせいで、私はjsでデータをラップする方法を修正しました。 :JSON.stringify(datas) }} データ:finaldata、 ' 私はこの ' '

  
結果やることができた直後: – tttaaabbb

+0

' '"で符号化された二重引用符以来、あなたがすべきも' htmlspecialchars_decodeを() '。しかし、それは本当の解決策ではありません... –

+0

私はroot jsonをデコードした後、ほとんど残っていません。これを管理しています: '$ info = json_decode($ tmp、true); {"product_id": "176"、 "colors":{"0": "000000"}、 "print":{"sizes": "print_r(($ info ['options'])); {\ "front \":{\ "width \" ... ''この文字列を 'htmlspecialchars_decode'でもデコードできません。 – tttaaabbb

関連する問題