开发者

JSON php and gson in java

开发者 https://www.devze.com 2023-03-20 23:12 出处:网络
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:

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 f开发者_如何学JAVAunctions getAsString,getAsInt.. etc are not useful in this case.


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)


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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号