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.