Использование JSON в PHP

Я использую json-просто с Java, чтобы получать и просить данные в формате JSON с PHP. Но я не встречаю способа делать правильный код с PHP, чтобы посылать и получать и в Java, чтобы получать.

Код JAVA, чтобы посылать и получать

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class JSONManager {

    // CLASS PROPERTIES

    private static JSONManager ourInstance = new JSONManager();

    private static final String USER_AGENT = "Mozilla/5.0";
    private static final String SERVER_PATH = "http://localhost/";

    // CLASS METHODS

    public static JSONManager getInstance() {
        return ourInstance;
    }

    // CONSTRUCTORS

    private JSONManager() {
    }

    // METHODS

    public synchronized void send() throws IOException{

        // SE AÑADEN ALGUNOS DATOS...

        final JSONObject jsonObject = new JSONObject();

        jsonObject.put("name","foo");
        jsonObject.put("age", 20);

        final List listOfJSONObjects = new LinkedList<>(Arrays.asList(jsonObject));

        // SE GENERA EL STRING DE JSON...

        String jsonString = JSONValue.toJSONString(listOfJSONObjects);

        // SE MUESTRA POR CONSOLA EL JSON GENERADO...

        System.out.printf("JSON generado: %s \n\n", jsonString);

        // SE CODIFICA EL JSON A UNA URL

        jsonString = URLEncoder.encode(jsonString, "UTF-8");
        String urlString = SERVER_PATH+"onListenerJSONJava.php"; // TODO <-- No se cómo debe ser el código allí.

        // SE GENERA UNA URL Y SE ABRE LA CONEXIÓN CON EL SERVIDOR

        final HttpURLConnection huc = (HttpURLConnection) new URL(urlString).openConnection();

        // SE AÑADE LA CABECERA

        huc.setRequestMethod("POST");
        huc.setRequestProperty("User-Agent", USER_AGENT);
        huc.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

        // SE ENVIAN LOS DATOS

        final String postParameters = "jsonJAVA="+jsonString;

        huc.setDoOutput(true);
        final DataOutputStream dos = new DataOutputStream(huc.getOutputStream());
        dos.writeBytes(postParameters);
        dos.flush();
        dos.close();

        // SE CAPTURA LA RESPUESTA DEL SERVIDOR

        final int responseCode = huc.getResponseCode(); // TODO <-- No se cómo debe ser el código allí.

        BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = br.readLine()) != null) {
            response.append(inputLine);
        }

        // SE MUESTRA POR CONSOLA EL 'MENSAJE' ENVÍADO AL SERVIDOR Y SU CÓDIGO DE RESPUESTA

        System.out.printf("\nSending 'POST' request to URL: %s\nPost parameters: %s\nResponse code: %d\n",
                urlString, postParameters,responseCode);

        // SE MUESTRA LA RESPUESTA DEL SERVIDOR Y SE CIERRA LA CONEXIÓN

        System.out.printf("\nResponse: %s:",response.toString());
        br.close();
    }

    public  T receive() {
        // TODO <-- No sé hacerlo aquí.
        return null;
    }

}

Код PHP, чтобы получать.//Fala посылать...

    if(isset($_POST["jsonJAVA"])){

        $json = $_POST["jsonJAVA"];

        // EN ESTE PUNTO NO SÉ COMO OBTENER EL JSON DESDE MI APP EN JAVA Y RESPONDER POR SUPUESTO...

            // TODO

        // GUARDAR DATOS EN BBDD SI ES NECESARIO TRAS VALIDARLOS...

            // TODO <-- Esto ya sé hacerlo.
    }

?>

4
задан 03.02.2016, 15:18
3 ответа

С частью Java я могу помогать тебе.

Чтобы посылать данные к серверу, очевидно мы будем использовать метод POST, сейчас; то, что мне не нравится подхода, который ты приносишь, так это способ, в который верит JSON. Java - язык, ориентируемый на объекты и поэтому должны отнестись к проблемам таким образом, я предлагаю тебе следующее:

Давайте предполагать, что я хочу послать JSON типа Человек, у человека есть признаки имя и фамилия; тогда я думаю, Что объект Является лично так:

public class Persona {
    private String nombre;
    private String apellido;

    //incluir los metodos get y set para cada atributo
}

Потом где-то моего кода, я должен заселять сюжет, который я хочу послать в сервер, уже будьте из-за базы данных или со статическими данными

 Persona p = new Persona();
 p.setNombre("Yo");
 p.setApellido("Tu");

Чтобы превращать этот класс в JSON в полет я рекомендую тебе это, что я сделал используя Gson

private static Gson gson = new Gson();

public static String objetoAJson(Object o) {
    return gson.toJson(o);
}

Таким образом только ты перемещаешь объект (Список или единственный Объект) в метод objetoAJson и возвратится один String с твоим JSON, готовым посылать.

Сейчас, после которого у тебя есть готовый JSON, ты должен посылать это с POST

Я предлагаю тебе этот метод

public static String sendPost(String url, String data) throws Exception {

        HttpURLConnection  con = (HttpURLConnection) new URL(url).openConnection();

        con.setRequestProperty("User-Agent", USER_AGENT);
        con.setRequestProperty("Accept","*/*");
        con.setRequestProperty("Content-Type","application/json");

        con.setDoOutput(true);
        con.setDoInput(true);

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(data);
        wr.flush();
        wr.close();
        data = null;

        System.out.println("\nSending 'POST' request to URL : " + url);

        InputStream it = con.getInputStream();
        InputStreamReader inputs = new InputStreamReader(it);

        BufferedReader in = new BufferedReader(inputs);
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }

        in.close();

        System.out.println("Servidor dice : " + response.toString());
        return response.toString();
    }

Только ты должен определять унифицированный указатель ресурса, куда должен прибывать контент, и конечно; контент (JSON), который ты пошлешь. Оставшаяся часть зависит твой код на сервере, который находится в PHP и там, если, который я не знаю, потому что я предотвращаю PHP.

Чтобы получать JSON с твоего сервера, мы используем GET (проще еще)

public static InputStream getJson(String _url) {
        try{
            URL url = new URL(_url);
            URLConnection urlConnection = url.openConnection();
            return urlConnection.getInputStream();
        }catch(Exception e) {
            return null;
        }
}

Результат возвратится в InputStream, который может быть преобразованным в такого String:

String text = new Scanner(>>aquí tu stream recibido<<).useDelimiter("\\A").next();

И я заношу в список, у тебя будет ответ сервера (JSON или какая-то ошибка) и ты сможешь работать с этим.

Любое сомнение, в команду. Привет!

4
ответ дан 24.11.2019, 14:55

Докуда я понимаю, ты реализуешь просьбу XHR с Java в PHP, в которой контента просьбы один JSON. Того, чтобы быть таким, в твоем файле PHP способ интерпретировать был бы используя json_decode ().

<?php

    if(isset($_POST["jsonJAVA"])){
        $json = json_decode($_POST["jsonJAVA"]);

        # De aquí en adelante es validar, guardar en DB 
        # y responder

    }
2
ответ дан 24.11.2019, 14:55
  • 1
    заметь: если php está в другом ip/servidor нужно говорить ему, чтобы он принял petició n помещая сначала header("Access-Control-Allow-Origin: *"); – alo Malbarez 01.04.2018, 10:46

PHP должен возвращать какой-то тип информации HTML. PHP работает стороны сервера и просьба JAVA делается из стороны клиента, из-за того, что ты должен писать какую-то информацию тип HTML, как будто ты посещал веб-страницу. Я объясняюсь с твоим примером:

<?php
    // Comprobacion
    if(isset($_POST["jsonJAVA"])){
        // Ejecutas todo el contenido que quieras hacer con esta
        // variable, ya sea guardar o sacar datos.
        // Si quisieras sacar valores a datos json seria:
        $json['nombre_salida'][] = array('variable' => 'dato', 'variable' => 'dato'); //Etc
    }
    // Finalmente necesitamos establecer las cabeceras y sacar los datos a HTML
    header('Content-Type: application/json');
    header('Content-Type: text/html; charset=utf-8');
    echo json_encode($json);
?>

Это был бы синтаксис. Привет.

0
ответ дан 24.11.2019, 14:55

Теги

Похожие вопросы