2017-05-09 10 views
1

オブジェクトを持っていて、APIとのやりとりのためにjsonに変換する必要があるので、オブジェクトと配列構造を維持する必要があります。 json_encode()別のオブジェクトを含む多次元オブジェクトをjsonに変換する

stdClass Object 
(
[method] => something 
[params] => Array 
    (
     [instructions] => stdClass Object 
      (
       [a] => 1 
       [b] => 2 
      ) 
    ) 
) 

峠それが、第二の目的instructionsは失われ、単に別の配列に変換します:次を取る

{ "method":"something", 
    "params":{ 
    "instructions": { "a":1,"b":2 } 
    } 
} 

は、私のような指示の周りに角括弧で終わる必要があります。

{ "method":"something", 
    "params":{ 
    "instructions": [ { "a":1,"b":2 } ] 
    } 
} 

私はJSON_FORCE_OBJECTのような定義済みの定数がある気づいたが、json_encodeのオプションとして0を持っているように見えたことを追加します効果。私は何が欠けていますか?

+0

json_encodeが適切にそれをやっています。命令はオブジェクトであり配列ではないので、なぜ配列として出てくるべきですか? –

+0

正確です。しかし、私は私のPHPオブジェクトを適切に構造化していないことを知りませんでした。だから私は、私のアウトプットがどうなるか言った。 – Bob

答えて

1

instructionsのためのあなたの要件は、オブジェクトの配列(あなたが使用[ { } ]表現)になることですが、あなたは2つのフィールドを持つ唯一の対象となるように設定します。次のことを試してみてください。

$arr = (object)[ 
    'method' => 'something', 
    'params' => [ 
     'instructions' => [ 
      [ 
       'a' => 1, 
       'b' => 2 
      ] 
     ] 
    ] 
]; 
echo json_encode($arr); 

出力:

{ 
    "method": "something", 
    "params": { 
     "instructions": [ 
      { 
       "a": 1, 
       "b": 2 
      } 
     ] 
    } 
} 
+0

ブーム!そうですか。今日、PHPでオブジェクトを構造化することについて新しいことを学びました。ありがとう – Bob

0

まず、json_encodeはうまく動作します:

$x = (object) [ 
    "method" => "something", 
    "params" => [ 
     "instructions" => (object) [ 
     "a" => 1, 
     "b" => 2 
    ] 
    ] 
]; 

echo json_encode($x); 

// {"method":"something","params":{"instructions":{"a":1,"b":2}}} 

そして、これは、連想配列のようなものがに従ってjavascriptを


ではありません、有効なJSON

"instructions": [ "a":1,"b":2 ] 

ではありませんあなたのコメントとあなたは

に配列を変更したい編集
$x = (object) [ 
    "method" => "something", 
    "params" => [ 
     "instructions" => [ 
     (object) [ 
      "a" => 1, 
      "b" => 2 
     ] 
    ] 
    ] 
]; 
+0

はい、正解ではありませんJSON - 私はブラケットのペアを見逃し、質問を更新しました。私はまだ命令が必要です。[{"a":1}] – Bob

+0

phpのオブジェクトをjsonのリストにオブジェクトをエンコードするようにどのように構造化すべきですか? – Bob

関連する問題