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.