JSONオブジェクトを正しい方法で作成する


107

PHP配列からJSONオブジェクトを作成しようとしています。配列は次のようになります。

$post_data = array('item_type_id' => $item_type,
    'string_key' => $string_key,
    'string_value' => $string_value,
    'string_extra' => $string_extra,
    'is_public' => $public,
    'is_public_for_contacts' => $public_contacts);

JSONをエンコードするコードは次のようになります。

$post_data = json_encode($post_data);

JSONファイルは、最終的には次のようになるはずです。

{
    "item": {
        "is_public_for_contacts": false,
        "string_extra": "100000583627394",
        "string_value": "value",
        "string_key": "key",
        "is_public": true,
        "item_type_id": 4,
        "numeric_extra": 0
    }
} 

作成したJSONコードを「アイテム」にカプセル化するにはどうすればよいですか:{JSON CODE HERE}。

回答:


161

通常は、次のようにします。

$post_data = json_encode(array('item' => $post_data));

しかし、出力を " {}"にする必要があるように思われるのでjson_encode()JSON_FORCE_OBJECT定数を渡すことにより、オブジェクトとして強制的にエンコードするようにしてください。

$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);

" {}"括弧はオブジェクトを指定し、 " []"はJSON仕様に従って配列に使用されます。


私はJSON_FORCE_OBJECTインを追加しますjson_encode($arr, JSON_FORCE_OBJECT)
アダム・ルカシク

これは正しいです?$ post_data = json_encode(array( 'item' => $ post_data)、JSON_FORCE_OBJECT);
Mark Denn、2010

1
jsonwrapper -多分これは誰かのために参考になるboutell.com/scripts/jsonwrapper.html json_(en|de)code PHPの以前のバージョンのために
robertbasic

私は、配列のどこかに、ネストされた内部を持っている場合$post_data。これはそれらもオブジェクトにするでしょう、正しいですか?
ProblemsOfSumit

echo json_encode(array( 'item' => $ post_data)); オブジェクト、配列、オブジェクトのJSON構造を作成します。または:{[{これがまさに私が探していたものであり、MySQL JSON応答をiOSアプリにインポートする:-) Cristianに感謝!!!
ジェイコブトッピング2015

63

ここに投稿された他の答えはうまくいきますが、私は次のアプローチがより自然であると思います:

$obj = (object) [
    'aString' => 'some string',
    'anArray' => [ 1, 2, 3 ]
];

echo json_encode($obj);

1
この反応はとても良いです。また、オブジェクトがエンコードされるタイミングを正確に制御しない場合、またはオブジェクトの配列をエンコードする場合も、JSON_FORCE_OBJECT応答は機能しません。反対側ははるかに読みやすいです。ありがとう!
Natxet

オブジェクトとして始まり、配列を含むようになるエンコードを探しているなら、これが答えです。
suchislife

31

あなただけのphp配列に別のレイヤーが必要です:

$post_data = array(
  'item' => array(
    'item_type_id' => $item_type,
    'string_key' => $string_key,
    'string_value' => $string_value,
    'string_extra' => $string_extra,
    'is_public' => $public,
   'is_public_for_contacts' => $public_contacts
  )
);

echo json_encode($post_data);

1
$post_data = [
  "item" => [
    'item_type_id' => $item_type,
    'string_key' => $string_key,
    'string_value' => $string_value,
    'string_extra' => $string_extra,
    'is_public' => $public,
    'is_public_for_contacts' => $public_contacts
  ]
];

$post_data = json_encode(post_data);
$post_data = json_decode(post_data);
return $post_data;

1

汎用オブジェクトをjsonエンコードできます。

$post_data = new stdClass();
$post_data->item = new stdClass();
$post_data->item->item_type_id = $item_type;
$post_data->item->string_key = $string_key;
$post_data->item->string_value = $string_value;
$post_data->item->string_extra = $string_extra;
$post_data->item->is_public = $public;
$post_data->item->is_public_for_contacts = $public_contacts;
echo json_encode($post_data);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.