json en php

superlucile
Invité n'ayant pas de compte PHPfrance

07 janv. 2015, 22:13

Bonsoir j'essaye de faire une liaison php/ java grâce à mes objets json.

Pour cela j'ai donc envoyer mes objets json en java voilà le code :

Code : Tout sélectionner

public static void main(String[] args) { // TODO Auto-generated method stub JSONObject obj = new JSONObject(); obj.put("name", "mkyong.com"); obj.put("age", new Integer(100)); System.out.print(obj); try { URL recup = new URL("http://localhost/json_good/recup.php"); java.net.HttpURLConnection connexion = (HttpURLConnection)recup.openConnection(); connexion.setDoOutput(true); // Pour pouvoir envoyer des données connexion.setRequestMethod("POST"); //envoi de la requête OutputStreamWriter writer = null; writer = new OutputStreamWriter(connexion.getOutputStream()); writer.write(obj.toString()); writer.flush(); } catch (Exception e) { System.out.println(" exception : " + e.getMessage()); } } }
et j'essaye donc de les recevoir en php voilà ce que j'ai essayé :

if(isset($HTTP_RAW_POST_DATA)){
echo 'OK'
$data = json_decode($HTTP_RAW_POST_DATA);
}

cela ne fonctionne pas et je ne comprends pas pourquoi, de plus je crois que HTTP_RAW n'est pas reconnu

Comment puis je recevoir mon objet json ?

Mammouth du PHP | 688 Messages

07 janv. 2015, 22:33

essaie d'afficher $_POST en php, voir ce que cela contient.

Mammouth du PHP | 571 Messages

08 janv. 2015, 00:30

bonsoir,
-Côté java
tu peux très bien stocker tes objets json dans un fichier json créé à l'aide de la méthode write() de FileWriter par exemple.Php pourra lire par la suite le fichier json généré.Sinon tu peux envisager comme moyen de stockage une base de données nosql comme mongoDB qui peut accueillir des objets json.

-côté php
tu vas lire le fichier json(json-decode), le parser et faire n'importe quel traitement.

Tu dois t'assurer que les objets java sont bien convertis en json en les affichant dans un terminal par exemple.

superlucile
Invité n'ayant pas de compte PHPfrance

08 janv. 2015, 16:50

comment puis je m'en assurer ?

Invité
Invité n'ayant pas de compte PHPfrance

08 janv. 2015, 16:54

voilà mon code en java :

Code : Tout sélectionner

public static void main(String[] args) { // TODO Auto-generated method stub JSONObject json = new JSONObject(); json.put("json", "mkyong.com"); //obj.put("age", new Integer(100)); System.out.print(json); try { URL recup = new URL("http://localhost/json_good/recup_v2.php"); java.net.HttpURLConnection connexion = (HttpURLConnection)recup.openConnection(); connexion.setDoOutput(true); // Pour pouvoir envoyer des données connexion.setRequestMethod("POST"); //envoi de la requête OutputStreamWriter writer = null; writer = new OutputStreamWriter(connexion.getOutputStream()); //conversion en chaine System.out.print(json.toString()); writer.write(json.toString()); writer.flush(); //#2 lecture de la réponse BufferedReader reader=null; reader = new BufferedReader(new InputStreamReader(connexion.getInputStream())); String ligne; while ((ligne = reader.readLine()) != null) { System.out.println(ligne);} } catch (Exception e) { System.out.println(" exception : " + e.getMessage()); }
et le resultat dans la console de eclipse :
{"json":"mkyong.com"}{"json":"mkyong.com"}<br />
<b>Warning</b>: json_decode() expects parameter 1 to be string, object given in <b>C:\Users\lucile\Desktop\PROJET 2A\logiciels\serveruXAMPPdossier\htdocs\json_good\recup_v2.php</b> on line <b>5</b><br />

et mon code de reception en php :
<?php
$json=file_get_contents("php://input");
$raw_json = json_decode($json);
$data=json_decode($raw_json);
mysql_query('insert into tb_user(username) values ('.$data.')');
?>

superlucile
Invité n'ayant pas de compte PHPfrance

08 janv. 2015, 16:55

je precise que c'est moi qui ai écrit les deux messsages precedents.

Pourquoi la consol m'affiche t elle </ br> ?

Mammouth du PHP | 571 Messages

08 janv. 2015, 20:40

il te suffit de rediriger les objets java convertis en json vers un fichier json ( fichier.json).En voici une implémentation:

Code : Tout sélectionner

public static void main(String[] args) { // TODO Auto-generated method stub JSONObject obj = new JSONObject(); obj.put("name", "mkyong.com"); obj.put("age", new Integer(100)); System.out.print(obj); FileWriter write = null; try { write = new FileWriter("C:\\Users\\lucile\\Desktop\\PROJET 2A\\logiciels\\serveruXAMPPdossier\\htdocs\\json_good\\fichier.json"); write.write(obj.toString() + "\n"); write.flush(); } catch (IOException e) { System.out.println(" exception : " + e.getMessage()); } finally { try { write.close(); } catch (IOException e) { e.printStackTrace(); } } }
Avec le fichier json généré précédemment, tu peux le lire et le parser avec la fonction json_decode() de php.
//script.php situé dans le même dossier que json_good
$json = file_get_contents("json_good/fichier.json");
//affichage de la représentation json
var_dump(json_decode($json));
//parcourir le tableau d'objet json_decode($json) avec une boucle pour effectuer le traitement
Après il me semble beaucoup plus cohérent d'insérer les objets json en BD avec java quitte à les lire ensuite avec php surtout si le programme java fonctionne en standoalone - n'est pas exécutée au sein d'un conteneur.