Gson()。toJson(this)无法正常工作

时间:2015-09-15 13:36:58

标签: java android json gson

我正在尝试通过GSON库将我的对象转换为String。 我写的是这样的:Gson()。toJson(this)和String我收到的并不完整。 这是我的“这个”对象:

http://i.snag.gy/LgXrw.jpg

如您所见,它具有准确性字段(结果 - > track-> points->准确度) 但是当我执行这个Gson()。toJson(this)时,我得到了没有这个字段的字符串。怎么了?

{
"carId": 14,
"closed": 1442409732,
"commentEnd": "оо",
"guid": "bbc329e4-65c5-4b16-91d5-45283ca9dcb7",
"isDeleted": false,
"lastUpdate": 0,
"litersEnd": -23.1,
"litersStart": -23.1,
"number": 0,
"odometrEnd": 25,
"odometrStart": 44,
"opened": 1442409723,
"id": 0,
"status": 2,
"Tracks": [
    {
        "categoryId": 2,
        "closed": 1442409729,
        "commentEnd": "рр",
        "distance": 0,
        "guid": "aba4de4a-5bc7-49fc-a537-b8da3dd17783",
        "opened": 1442409723,
        "points": [
            {
                "dateCreated": 1442409725,
                "guid": 579,
                "lat": 56.8408432,
                "lng": 53.2100482
            }
        ],
        "id": 0,
        "statusNumber": 2
    }
],

}

我对Point对象的类看起来像那样(只是声明变量:

@DatabaseTable(tableName = "points")
public class Point implements Serializable {

@DatabaseField(generatedId = true)
@SerializedName("guid")
long id;
@DatabaseField(foreign = true, columnName = "trackId")
transient Track track;
@DatabaseField
double lat;
@DatabaseField
double lng;
@DatabaseField
long dateCreated;
@DatabaseField
transient float accuracy; //this field is faulty
transient String provider;

public Point() {}

public Point(double lat, double lng, long dateCreated) {
    this.lat = lat;
    this.lng = lng;
    this.dateCreated = dateCreated / 1000L;
}

}

跟踪对象的字段,该字段是 DrivingList 对象的字段,其扩展可上传我在其中运行此代码的抽象类:

public abstract class Uploadable {

public String toJson() {
    return new Gson().toJson(this);
}

2 个答案:

答案 0 :(得分:1)

抱歉,我班上的这个字段很短暂。

Java中的transient关键字用于表示不应序列化字段。

答案 1 :(得分:0)

我的json数据就像

{"name":"naval","edu":"pg","gender":"male"}

所以我的模型类将存储json数据的值应该是这样的

public class Model
{
 String name,edu,gender;
 public String getName()
{
return name;
}
public String getEdu()
{
return edu;
}
public String getGender()
{
return gender;
}
public String setGender(String gender)
{
this.gender=gender;
}
public String setName(String name)
{
this.name=name;
}
public String setEdu(String edu)
{
this.edu=edu;
}

 }

我们希望json数据的位置将被流式传输或下载 在那个地方写下这段代码

String strJson=getjsonString();//your method to get jsondata as string

或本地测试用例

  strJson="{\"name\":\"naval\",\"edu\":\"pg\",\"gender\":\"male\"}";//this is for demo   
Gson gson=new Gson();
Model model = gson.fromJson(strJson,Model.class);    System.out.println(model.getName()+","+model.getEdu()+","+model.getGender());

这将打印出像这样的

naval,pg,male

将json写入模型类 当你想将类对象转换为jsonString时,请使用此

Model modelInfo =new Model();
modelInfo.setName("Vijay");model.setEdu("B.tech");
String strJsonobj=gson.toJson(modelInfo);
System.out.println(strJSONOBJ);

IT将像这样打印json

{"name":"Vijay","edu":"B.tech","gender":"null"}

正如您所看到的那样,未设置的变量将默认值为null 或者如果json将有额外的数据在课堂上没有,它将被放弃,并且将在那里设置相应的值