Erstellen Sie das JSON-Objekt auf die richtige Weise


107

Ich versuche, ein JSON-Objekt aus einem PHP-Array zu erstellen. Das Array sieht folgendermaßen aus:

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

Der Code zum Codieren des JSON sieht folgendermaßen aus:

$post_data = json_encode($post_data);

Die JSON-Datei soll am Ende so aussehen:

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

Wie kann ich den erstellten JSON-Code in das "Element" einkapseln: {JSON CODE HERE}.

Antworten:


161

Normalerweise würden Sie so etwas tun:

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

Da es jedoch so aussieht, als {}ob die Ausgabe mit " " erfolgen soll, sollten Sie die json_encode()Codierung als Objekt erzwingen , indem Sie die JSON_FORCE_OBJECTKonstante übergeben.

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

" {}" Klammern geben ein Objekt an und " []" werden für Arrays gemäß der JSON-Spezifikation verwendet.


Ich würde die JSON_FORCE_OBJECTinjson_encode($arr, JSON_FORCE_OBJECT)
Adam Lukaszczyk

Ist das richtig? $ post_data = json_encode (Array ('item' => $ post_data), JSON_FORCE_OBJECT);
Mark Denn

1
Vielleicht ist dies hilfreich für jemanden - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code für frühere Versionen von PHP
robertbasic

was ist, wenn ich ein Array irgendwo verschachtelte innen haben $post_data. Dies würde sie auch zu Objekten machen, richtig?
Probleme von

echo json_encode (array ('item' => $ post_data)); erstellt die JSON-Struktur von: Object, Array, Object. oder: {[{Was genau das ist, wonach ich gesucht habe, um MySQL JSON-Antwort in eine iOS-App zu importieren :-) DANKE Cristian !!!
Jacob Topping

63

Obwohl die anderen hier veröffentlichten Antworten funktionieren, finde ich den folgenden Ansatz natürlicher:

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

echo json_encode($obj);

1
Diese Antwort ist so gut. Auch wenn Sie nicht genau steuern, wann ein Objekt codiert werden soll oder wenn Sie ein Array von Objekten codieren möchten, funktioniert die Antwort JSON_FORCE_OBJECT nicht. Auf der anderen Seite ist viel besser lesbar. Vielen Dank!
Natxet

Wenn Sie nach einer Codierung suchen, die als Objekt beginnt und Arrays enthält, ist dies Ihre Antwort.
suchislife

31

Sie brauchen nur eine weitere Ebene in Ihrem PHP-Array:

$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

Sie könnten ein generisches Objekt json codieren.

$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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.