สร้างวัตถุ JSON ด้วยวิธีที่ถูกต้อง


107

ฉันพยายามสร้างออบเจ็กต์ JSON จากอาร์เรย์ PHP อาร์เรย์มีลักษณะดังนี้:

$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 ที่สร้างไว้ใน "item" ได้อย่างไร: {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)
Adam Lukaszczyk

ถูกต้องหรือไม่ $ post_data = json_encode (array ('item' => $ post_data), JSON_FORCE_OBJECT);
Mark Denn

1
บางทีนี่อาจจะเป็นประโยชน์สำหรับใครบางคน - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)codeสำหรับ PHP เวอร์ชันก่อนหน้า
robertbasic

$post_dataสิ่งที่ถ้าฉันมีภายในอาร์เรย์ที่ไหนสักแห่งที่ซ้อนกัน สิ่งนี้จะทำให้พวกเขาเป็นวัตถุเช่นกันถูกต้อง?
ProblemsOfSumit

echo json_encode (อาร์เรย์ ('item' => $ post_data)); จะสร้างโครงสร้าง JSON ของ: Object, Array, Object หรือ: {[{ซึ่งคือสิ่งที่ฉันกำลังมองหาการนำเข้าการตอบกลับ MySQL JSON ไปยังแอป iOS :-) ขอบคุณ Cristian !!!
Jacob Topping

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.