Buat objek JSON dengan cara yang benar

107

Saya mencoba membuat objek JSON dari array PHP. Array terlihat seperti ini:

$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);

Kode untuk menyandikan JSON terlihat seperti ini:

$post_data = json_encode($post_data);

File JSON seharusnya terlihat seperti ini pada akhirnya:

{
    "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
    }
} 

Bagaimana saya bisa mengenkapsulasi kode JSON yang dibuat dalam "item": {JSON CODE HERE}.

Mark Denn
sumber

Jawaban:

161

Biasanya, Anda akan melakukan sesuatu seperti ini:

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

Tapi, karena tampaknya Anda ingin keluarannya dengan " {}", Anda lebih baik memastikan untuk memaksa json_encode()penyandian sebagai objek, dengan meneruskan JSON_FORCE_OBJECTkonstanta.

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

{}Tanda kurung " " menentukan objek dan " []" digunakan untuk larik menurut spesifikasi JSON.

Cristian
sumber
saya akan menambahkan JSON_FORCE_OBJECTdalamjson_encode($arr, JSON_FORCE_OBJECT)
Adam Lukaszczyk
Apakah ini benar? $ post_data = json_encode (larik ('item' => $ post_data), JSON_FORCE_OBJECT);
Mark Denn
1
mungkin ini akan membantu seseorang - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code untuk versi PHP sebelumnya
robertbasic
bagaimana jika saya memiliki array di suatu tempat bersarang di dalam $post_data. Ini akan membuat mereka menjadi objek juga, benar?
ProblemsOfSumit
echo json_encode (larik ('item' => $ post_data)); akan membuat struktur JSON dari: Object, Array, Object. atau: {[{Yang persis seperti yang saya cari, mengimpor tanggapan MySQL JSON ke aplikasi iOS :-) TERIMA KASIH Cristian !!!
Jacob Topping
63

Meskipun jawaban lain yang diposting di sini berfungsi, saya menemukan pendekatan berikut lebih alami:

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

echo json_encode($obj);
theDmi
sumber
1
Respon ini sangat bagus. Juga ketika Anda tidak mengontrol dengan tepat kapan sebuah objek akan dienkode atau jika Anda ingin mengenkode larik objek: maka respons JSON_FORCE_OBJECT tidak berfungsi. Di sisi lain jauh lebih mudah dibaca. Terima kasih!
Natxet
Jika Anda mencari penyandian yang dimulai sebagai objek dan mulai berisi array, inilah jawaban Anda.
suchislife
31

Anda hanya perlu lapisan lain dalam array php Anda:

$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);
zeusstl
sumber
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;
Alauddin Afif Cassandra
sumber
1

Anda bisa json menyandikan objek generik.

$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);
Mitesh
sumber