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}.

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.


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

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

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

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.