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.