2017-05-09 228 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