2017-05-09 194 views
1

我有一個對象需要轉換爲json以便與API交互,因此我必須維護對象和數組結構。看看下面:將另一個對象轉換爲json的多維對象

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

它傳遞給json_encode()但第二個對象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要求是對象(即你使用[ { } ]表達)的陣列,但將其設置爲僅具有兩個字段中的對象。請嘗試以下操作:

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

輸出:

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

BOOM!我懂了。今天學到了一些新東西,然後介紹如何在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}}} 

這是不是有效的JSON

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

有作爲根據關聯數組在JavaScript


沒有這樣的事你的評論和編輯你想改變陣列爲

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

是的,正確的是無效的JSON - 我錯過了一對括號並更新了問題。我仍然需要'指令:[{「a」:1}]' – Bob

+0

我的PHP對象應該如何構造,以便將對象編碼爲json列表? – Bob