0

Is it possible to encode using json_encode() function in PHP a variable that is an object of class? If yes then how can i get back the class object fields using gson in java:

Entry jsonElement.;

jsonElement.getValue.getAs... The available functions getAsString,getAsInt.. etc are not useful in this case.

2 Answers 2

2

from http://www.json.org:

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999

It is a data interchange format so it can be used by any language. That's why for example you can use Twitter's REST api from any language you like.

code:

<?php

class Point {
    private $x;
    private $y;

    public function __construct($x, $y) {
        $this->x = $x;
        $this->y = $y;
    }

    public static function fromJSON($json) {
        //return json_decode($json);
        $obj = json_decode($json);
        return new Point($obj->x, $obj->y);
    }

    public function toJSON() {
        /*

        If you want to omit properties because of security, I think you will have to write this yourself.

        return json_encode(array(
            "x" => $this->x,
            "y" => $this->y
        ));

        You could easily do something like to omit x for example.

        $that = $this;
        unset($that->x);
        return json_encode(get_object_vars($that));

        */
        // Thank you http://stackoverflow.com/questions/4697656/using-json-encode-on-objects-in-php/4697749#4697749
        return json_encode(get_object_vars($this));
    }

    public function  __toString() {
        return print_r($this, true);
    }
}

$point1 = new Point(4,8);

$json = $point1->toJSON();
echo $json;
echo $point1;

$point2 = Point::fromJSON($json);
echo $point2;

output:

alfred@alfred-laptop:~/www/stackoverflow/6719084$ php class.php 
{"x":4,"y":8}Point Object
(
    [x:Point:private] => 4
    [y:Point:private] => 8
)
Point Object
(
    [x:Point:private] => 4
    [y:Point:private] => 8
)

This json_string you can just import into the object you like.

From Java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package point;

import com.google.gson.Gson;


/**
 *
 * @author alfred
 */
public class Point {

    private int x,y;
    public static Gson gson = new Gson();

    public Point(int x, int y) {
            this.x = x;
            this.y = y;
    }

    public static Point fromJSON(String json) {
        Point p = gson.fromJson(json, Point.class);
        return p;
    }

    @Override
    public String toString() {
        return "(" + x + "," + y + ")";
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Point fromJSON = Point.fromJSON("{\"x\":4,\"y\":8}");
        System.out.println(fromJSON);
    }
}

Output

(4,8)
Sign up to request clarification or add additional context in comments.

Comments

2

According to php.net, yes you can json_encode anything except a resource so encoding an instance of a class is possible. http://php.net/manual/en/function.json-encode.php

Regarding java; i'm not much familiar but you have a look here: How to decode a json string with gson in java?

(there's an example at the bottom how to get the object through GSON

1 Comment

But what happens when the php class is decoded in java...? Thats what I am asking....

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.