44

JSONエンコードしたいPHPデータ構造があります。いくつかの空の配列を含めることができ、そのうちのいくつかは配列としてエンコードする必要があり、いくつかはオブジェクトとしてエンコードする必要があります。

たとえば、次のデータ構造があるとします。

$foo = array(
  "bar1" => array(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

これを次のようにエンコードしたいと思います。

{
  "bar1": {},
  "bar2": []
}   

しかし、使用するjson_encode($foo, JSON_FORCE_OBJECT)と、オブジェクトは次のように取得されます。

{
  "bar1": {},
  "bar2": {}
}

そして、私が使用する場合、私はjson_encode($foo)次のように配列を取得します:

{
  "bar1": [],
  "bar2": []
}

配列とオブジェクトが混在するようにデータをエンコードする(または配列を定義する)方法はありますか?

4

3 に答える 3

82

オブジェクトとして作成bar1new stdClass()ます。json_encode()それがそれを区別する唯一の方法になります。new stdClass()を呼び出すか、でキャストすることで実行できます(object)array()

$foo = array(
  "bar1" => new stdClass(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

echo json_encode($foo);
// {"bar1":{}, "bar2":[]}

または型キャストによる:

$foo = array(
  "bar1" => (object)array(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);

echo json_encode($foo);
// {"bar1":{}, "bar2":[]}
于 2012-07-26T13:41:49.153 に答える
1

php7+とphp5.4についても同じ答えです。

$foo = [
  "bar1" => (object)["",""],
  "bar2" => ["",""]
];

echo json_encode($ foo);

于 2018-09-14T18:22:33.137 に答える
-6

答えはありません。関数が、どの配列を配列にするか、どの配列をオブジェクトにするかについての意図を推測する方法はありません。json_encodingを実行する前に、必要な配列をオブジェクトとしてキャストするだけです。

于 2012-07-26T13:42:18.010 に答える