当前位置: 首页 > 知识库问答 >
问题:

Android将对象转换为JSON格式,GSON不工作

花和宜
2023-03-14

我试图用GSON将一个对象转换成JSON格式。然后,我将把JSON发送给用php编写的webservice。不幸的是,由于某种原因,gson.toJson(object)方法不起作用。

我有这个java对象干预(它包含字符串、日期、时间和位图类型的几个字段)。当我尝试这样做时:

Gson gson = new Gson();
String json = gson.toJson(intervention);

我在gson变量中得到这个:

gson={seralizeNulls: false工厂:[Factory[type=com. google. gson. JsonElement,适配器=com. google. gson.内部. bind. TypeAdapters$25@40fbe5c8], com. google. gson.内部. bind. ObjectTypeAdapter$1@411b7db8, Factory[type=java. lang. String,适配器=com. google. gson.内部. bind. TypeAdapters$13@40ff42d0], Factory[type=java. lang.整数int,适配器=com. google. gson.内部. bind. TypeAdapters$7@411c00f8], Factory[type=java. lang. Boolean布尔值,适配器=com. google. gson.内部. bind. TypeAdapters$3@411b4798], Factory[type=java. lang. Byte byte,适配器=com. google. gson.内部. bind. TypeAdapters$5@4122dbd0], Factory[type=java. lang.短,适配器=com. google. gson.内在. bind. TypeAdapters$19@41229028],工厂[type=java. util. UUID,适配器=com. google. gson.内在. bind. TypeAdapters$21@411a2200],工厂[type=java. util. Locale,适配器=com. google. gson.内在. bind. TypeAdapters$24@411a2510],工厂[type=java. net. Inet地址,适配器=com. google. gson.内在. bind. TypeAdapters$20@41229328],工厂[type=java. util. BitSet,适配器=com. google. gson.内在. bind. TypeAdapters$2@411ca140],com. google. gson.内在. bind. DateTypeAdapter$1@412024f8,工厂[type=java. util. Calendar java. util. GregorianCalendar,适配器=com. google. gson.内在. bind. TypeAdapters$23@411bef70]

import android.graphics.Bitmap;
import com.google.gson.annotations.SerializedName;
import java.util.Date;

公共课堂干预{

@SerializedName("case_id")
private String case_id;
public String getCase_id() {
    return case_id;
}

@SerializedName("user_id")
private String user_id;
public String getUser_id() {
    return user_id;
}

@SerializedName("account_id")
private String account_id;
public String getAccount_id() {
    return account_id;
}

@SerializedName("description")
private String description;
public String getDescription() {
    return description;
}

@SerializedName("solution")
private String solution;
public String getSolution() {
    return solution;
}

@SerializedName("status")
private String status;
public String getStatus() {
    return status;
}

@SerializedName("user_remarks")
private String user_remarks;
public String getUser_remarks() {
    return user_remarks;
}


@SerializedName("customer_remarks")
private String customer_remarks;
public String getCustomer_remarks() {
    return customer_remarks;
}

@SerializedName("case_complete")
private boolean case_complete;
public boolean isCase_complete() {
    return case_complete;
}

@SerializedName("charge_transport")
private boolean charge_transport;
public boolean isCharge_transport() {
    return charge_transport;
}

@SerializedName("service_billable")
private boolean service_billable;
public boolean isService_billable() {
    return service_billable;
}

@SerializedName("date_created")
private Date date_created;
public Date getDate_created() {
    return date_created;
}

@SerializedName("arrival_time")
private String arrival_time;
public String getArrival_time() {
    return arrival_time;
}

@SerializedName("departure_time")
private String departure_time;
public String getDeparture_time() {
    return departure_time;
}

@SerializedName("user_sign")
private Bitmap user_sign;
public Bitmap getUser_sign() {
    return user_sign;
}

@SerializedName("cust_sign")
private Bitmap cust_sign;
public Bitmap getCust_sign() {
    return cust_sign;
}

public void setUser_id(String user_id) {
    this.user_id = user_id;
}

public void setCase_id(String case_id) {
    this.case_id = case_id;
}


public void setAccount_id(String account_id) {
    this.account_id = account_id;
}



public void setDescription(String description) {
    this.description = description;
}



public void setSolution(String solution) {
    this.solution = solution;
}



public void setStatus(String status) {
    this.status = status;
}


public void setUser_remarks(String user_remarks) {
    this.user_remarks = user_remarks;
}



public void setCustomer_remarks(String customer_remarks) {
    this.customer_remarks = customer_remarks;
}



public void setCase_complete(boolean case_complete) {
    this.case_complete = case_complete;
}



public void setCharge_transport(boolean charge_transport) {
    this.charge_transport = charge_transport;
}

public void setService_billable(boolean service_billable) {
    this.service_billable = service_billable;
}


public void setDate_created(Date date_created) {
    this.date_created = date_created;
}

public void setArrival_time(String arrival_time) {
    this.arrival_time = arrival_time;
}


public void setDeparture_time(String departure_time) {
    this.departure_time = departure_time;
}

public void setUser_sign(Bitmap user_sign) {
    this.user_sign = user_sign;
}

public void setCust_sign(Bitmap cust_sign) {
    this.cust_sign = cust_sign;
}

}

上面的类是对象类。

我验证了对象干预并填充了字段。有人可以向我解释我在这里做错了什么吗?

共有1个答案

徐淳
2023-03-14

当前版本的Gson(2.2.2)对Date对象没有问题,并且可以很好地序列化/反序列化它们。如果您正在寻找特定格式,您可以使用GsonBuilder中的setDateFormat()来指定它。

您的位图对象是另一个问题。这是一个非常复杂的对象,不是Gson会知道如何处理的东西(更不用说非常非常困难,甚至很难用JSON表示)。您需要编写自定义序列化程序和反序列化程序来处理它。

看一下位图的留档,似乎您可以使用getPixels()将像素数据提取到int[]数组中,并使用适当的静态createBitmap()方法从该数据构造位图。您需要编写一个序列化程序,从中生成JSON(还包括其他参数),然后编写一个反序列化程序,该反序列化程序知道如何读取该JSON并返回位图

有关编写自定义序列化程序/反序列化程序的信息,请参阅Gson用户指南:https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserialization

 类似资料:
  • 我有一个以以下格式返回json对象的响应: 我有一个Java类: 我想使用GSON将JSON对象映射到Java对象。 我尝试使用反序列化,它返回了JSON中嵌套值的。

  • 问题内容: 目前,我正在使用带有webView前端的本机android应用程序。 我有类似的东西: 在活动中 我做了一个dataObject数组,比如dataObject x [5]; 现在,我想将这5个dataObject作为JSON的回调函数传递给我的javascript webView接口。 我浏览了互联网,似乎大多数教程都在谈论如何转换。没有太多关于。我找到了一个教会我的人,可以工作。 但

  • 我使用的是名为Gson的Google JSON API,在设置Java类以便使用方法时遇到了困难。 从JSON数据中,我知道有一个包含所有数据的对象数组。让我感到困惑的是外部标记。我知道我必须构造一个表示对象的类,但是我是否也必须创建一个表示的类,因为它包含? 目前,我有一个名为的文件,其中包含以下内容: 我只包括了我计划使用的变量。上面的JSON数据包含在一个名为的字符串中,这就是我在main方

  • 问题内容: 我正在尝试使用GSON将JSON对象转换为POJO。 JSON字串 与GSON一起使用的AutomationProjectsList类 自动化项目POJO 我正在使用的代码 JSONArray jsonArray =新的JSONArray(response.getEntity(String.class)); 但是它给出了一个例外: 为什么会收到IndexOutOfBoundsExcep

  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 问题内容: 假设我有json字串 现在我有一个班级用户 现在如何将上述json字符串转换为用户类对象 问题答案: 试试这个: