24 votes

créer un objet JSON imbriqué en php ?

Je ne travaille pas beaucoup avec php et je suis un peu flou sur la création d'objets. J'ai besoin de faire une requête webservice envoyant du json et je pense que j'ai couvert cette partie. Avant de pouvoir soumettre les données, je dois créer un objet imbriqué. Je pensais que ce serait trivial en me basant sur mon expérience avec les langages de script basés sur ecma, mais je trouve que la syntaxe est difficile à naviguer. L'objet que je souhaite créer est le suivant.

{ "client": {
    "build": "1.0",
    "name": "xxxxxx",
    "version": "1.0"
    },
    "protocolVersion": 4,
    "data": {
        "distributorId": "xxxx",
        "distributorPin": "xxxx",
        "locale": "en-US"
    }
}

J'ai vu beaucoup d'exemples d'objets plats, mais je n'ai pas encore trouvé d'exemple minimal d'objet imbriqué. Quelle serait la syntaxe php pour l'objet ci-dessus ? Est-ce une chose inhabituelle à faire en php ?

47voto

Ejaz Points 8219

Cette structure JSON peut être créée par le code PHP suivant

$json = json_encode(array(
     "client" => array(
        "build" => "1.0",
        "name" => "xxxxxx",
        "version" => "1.0"
     ),
     "protocolVersion" => 4,
     "data" => array(
        "distributorId" => "xxxx",
        "distributorPin" => "xxxx",
        "locale" => "en-US"
     )
));

voir json_encode

16voto

Guillermo Tallano Points 169

Voici une astuce rapide pour convertir manuellement des JSONs complexes en objets PHP.

Prenez l'exemple JSON comme vous l'avez fait :

{ "client": {
    "build": "1.0",
    "name": "xxxxxx",
    "version": "1.0"
    },
    "protocolVersion": 4,
    "data": {
        "distributorId": "xxxx",
        "distributorPin": "xxxx",
        "locale": "en-US"
    }
}

Recherche-remplacement { a array(

Recherche-remplacement : a =>

Recherche-remplacement } a )

Fait.

4voto

Devesh Points 3792

Tableau de l'utilisateur pour obtenir le format correct, puis appeler echo json_encode(tableau)

           array( "client" => array(
    "build" => "1.0",
    "name" => "xxxxxx",
    "version" => "1.0"
 ),
 "protocolVersion" => 4,
 "data" => array(
    "distributorId" => "xxxx",
    "distributorPin" => "xxxx",
    "locale" => "en-US"
 ))

3voto

ilikemypizza Points 362
$client = new Client();
$client->information = new Information();
$client->information->build = '1.0';
$client->information->name = 'xxxxxx';
$client->information->version = '1.0';
$client->protocolVersion = 4;
$client->data = new Data();
$client->data->distributorId = "xxxx";
$client->data->distributorPin = "xxxx";
$client->data->locale = "en-US";

Peut-être quelque chose comme ce qui précède ? Le client détiendrait deux objets. Information et Données.

Editer En utilisant json_encode, vous créerez cet objet sous forme de tableau en PHP

$clientObj = array('client'=> 
    array( array('build'=>'1.0','name'=>'xxxx', 'version'=>'1.0'), 

           'protocolVersion'=>4, 

           'data'=>array('distributorId' => 'xxxx', 'distributorPin' => 'xxxx', 'locale' => 'en-US')
);

print json_encode($clientObj);

2voto

MSVKC Points 21

Nous pouvons également construire des tableaux imbriqués et ensuite faire un json_encode pour construire du JSON imbriqué.

Par exemple

{"User":
       {"username":"test",
        "address":"Posted value fro address field",
        "location":{
                     "id":12345
                    }
        }
}

Le résultat ci-dessus peut être obtenu en écrivant le code php ci-dessous :

<?php
$obj = array(
            'username'=>$lv_username,
            'address'=>$lv_address,
            'location'=>array('id'=>$lv_locationId)
    );
$data = '{"User":'. json_encode($obj) .'}';
echo $data;

?>

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X