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}.

Mark Denn
quelle

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.

Cristian
quelle
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);
theDmi
quelle
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);
zeusstl
quelle
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;
Alauddin Afif Cassandra
quelle
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);
Mitesh
quelle