JSON nesnesini doğru şekilde oluşturun


107

Bir PHP dizisinden JSON nesnesi oluşturmaya çalışıyorum. Dizi şuna benzer:

$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'u kodlamak için kod şuna benzer:

$post_data = json_encode($post_data);

JSON dosyasının sonunda şöyle görünmesi gerekiyor:

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

Oluşturulan JSON kodunu "öğe" olarak nasıl kapsülleyebilirim: {JSON CODE HERE}.

Yanıtlar:


161

Genellikle şöyle bir şey yaparsınız:

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

Ancak çıktının " {}" ile olmasını istediğiniz gibi göründüğünden json_encode(), JSON_FORCE_OBJECTsabiti geçirerek nesne olarak kodlamayı zorladığınızdan emin olmalısınız .

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

" {}" köşeli parantezler bir nesneyi belirtir ve " []" diziler için JSON spesifikasyonuna göre kullanılır.


i eklersiniz JSON_FORCE_OBJECTiçindejson_encode($arr, JSON_FORCE_OBJECT)
— Adam Lukaszczyk

Bu doğru mu? $ post_data = json_encode (array ('öğe' => $ post_data), JSON_FORCE_OBJECT);
— Mark Denn

1
belki bu birisi için yararlı olabilir - PHP'nin önceki sürümleri için jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code
— robertbasic

ya iç içe geçmiş bir dizim varsa $post_data. Bu onları aynı zamanda nesne yapar, değil mi?
— ProblemsOfSumit

echo json_encode (array ('öğe' => $ post_data)); JSON yapısını oluşturacak: Object, Array, Object. veya: {[{Tam olarak aradığım şey buydu, MySQL JSON yanıtını bir iOS uygulamasına aktarıyorum :-) TEŞEKKÜRLER Cristian !!!
— Jacob Sos

63

Burada yayınlanan diğer cevaplar işe yarasa da, aşağıdaki yaklaşımı daha doğal buluyorum:

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

echo json_encode($obj);

1
Bu tepki çok güzel. Ayrıca, bir nesnenin tam olarak ne zaman kodlanacağını kontrol etmediğinizde veya bir nesne dizisini kodlamak istiyorsanız: JSON_FORCE_OBJECT yanıtı çalışmaz. Diğer yandan çok daha okunaklı. Teşekkürler!
— Natxet

Bir nesne olarak başlayan ve dizileri içeren bir kodlama arıyorsanız, cevabınız budur.
— suchislife

31

Sadece php dizinizde başka bir katmana ihtiyacınız var:

$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

Jenerik bir nesneyi json kodlayabilirsiniz.

$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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.