Tạo đối tượng JSON theo đúng cách


107

Tôi đang cố gắng tạo một đối tượng JSON từ một mảng PHP. Mảng có dạng như sau:

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

Mã để mã hóa JSON trông như sau:

$post_data = json_encode($post_data);

Cuối cùng thì tệp JSON phải trông như thế này:

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

Làm cách nào để đóng gói mã JSON đã tạo trong "item": {JSON CODE HERE}.

Câu trả lời:


161

Thông thường, bạn sẽ làm điều gì đó như sau:

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

Tuy nhiên, có vẻ như bạn muốn đầu ra bằng " {}", bạn nên đảm bảo buộc json_encode()mã hóa dưới dạng đối tượng, bằng cách chuyển JSON_FORCE_OBJECThằng số.

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

" {}" Dấu ngoặc chỉ định một đối tượng và " []" được sử dụng cho các mảng theo đặc điểm kỹ thuật JSON.


tôi sẽ thêm JSON_FORCE_OBJECTvàojson_encode($arr, JSON_FORCE_OBJECT)
Adam Lukaszczyk

Điều này có chính xác? $ post_data = json_encode (array ('item' => $ post_data), JSON_FORCE_OBJECT);
Mark Denn

1
có lẽ đây sẽ rất hữu ích cho một ai đó - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code cho các phiên bản trước của PHP
robertbasic

điều gì sẽ xảy ra nếu tôi có một mảng ở đâu đó được lồng vào bên trong $post_data. Điều này cũng sẽ làm cho chúng trở thành đối tượng, đúng không?
ProblemsOfSumit

echo json_encode (array ('item' => $ post_data)); sẽ tạo cấu trúc JSON của: Object, Array, Object. hoặc: {[{Đó chính xác là những gì tôi đang tìm kiếm, đang nhập phản hồi JSON của MySQL vào ứng dụng iOS :-) CẢM ƠN Cristian !!!
Jacob đứng đầu

63

Mặc dù các câu trả lời khác được đăng ở đây hoạt động, nhưng tôi thấy cách tiếp cận sau đây tự nhiên hơn:

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

echo json_encode($obj);

1
Phản hồi này rất tốt. Ngoài ra, khi bạn không kiểm soát chính xác thời điểm một đối tượng sẽ được mã hóa hoặc nếu bạn muốn mã hóa một mảng đối tượng: thì phản hồi JSON_FORCE_OBJECT không hoạt động. Mặt khác dễ đọc hơn nhiều. Cảm ơn!
Natxet

Nếu bạn đang tìm kiếm một mã hóa bắt đầu dưới dạng một đối tượng và tiếp tục chứa các mảng, thì đây là câu trả lời của bạn.
suchislife

31

Bạn chỉ cần một lớp khác trong mảng php của mình:

$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

Bạn có thể mã hóa json một đối tượng chung chung.

$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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.