【问题标题】:Gson().toJson(this) not working properlyGson().toJson(this) 无法正常工作
【发布时间】:2015-09-15 13:36:58
【问题描述】:

我正在尝试通过 GSON 库将我的对象转换为字符串。 我是这样写的:Gson().toJson(this) 和String 我收到的不是满的。 这是我的“this”对象:

如您所见,它具有准确度字段(结果 -> 轨迹 -> 点数-> 准确度) 但是当我执行这个 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;
}

}

PointTrack对象的字段,是DrivingList对象的字段,扩展了Uploadable我在其中运行此代码的抽象类:

public abstract class Uploadable {

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

【问题讨论】:

  • 如果您不发布任何代码,我们将无法为您提供帮助。请edit您的帖子包含更多代码。
  • 确保该字段不是transient

标签: java android json gson


【解决方案1】:

抱歉,我班上的这个字段是临时的。

Java中的transient关键字用来表示一个字段不应该被序列化。

【讨论】:

  • 这是对您问题的回答吗??
  • @AbhinavSinghMaurya 这会导致亚历克斯看到的,所以可能。
  • 似乎我的怀疑是正确的;干得好,回答你自己的问题做得好(y)+1
  • @durron597 实际上,Alex 没有像 java 代码那样提供有问题的完整信息,所以这是一种错误的问答。
【解决方案2】:

我的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);

它会像这样的 json 打印出来

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

如您所见,未设置的变量将默认值为 null 或者如果 json 将有额外的数据,而这些数据在类中不存在,它将被丢弃,并且将在那里设置相应的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多