我试图读取JSON文件并将其转换为数组,但是在读取JSON文件后从数组获取空值。我正在为我的ShipDetail
班级使用默认构造函数。
BufferedReader detailReader = new BufferedReader( new FileReader(shipDetails));
// Buffered passed to convert json array to java array
ShipDetail[] shipDetail = gson.fromJson(detailReader, ShipDetail[].class );
System.out.println( shipDetail[0].toString());
// Convert array to arrayList
ArrayList<ShipDetail> detailArray = new ArrayList<ShipDetail>(Arrays.asList(shipDetail));
JSON文件:
[
{
"idmessage":"27301",
"idsession":"362",
"time_stamp_system":"2017-01-20 14:51:14",
"NMEA_string":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"processed":"1",
"MMSI":"0000000001",
"AIS_version":"0",
"IMO_number":"xxxxxxxxxx",
"callSign":"ODLK1",
"name":"ODLXJ KWW",
"type_of_ship_and_cargo":"0",
"bow_to_possition_unit":"212",
"stern_to_possition_unit":"71",
"port_to_possition_unit":"22",
"starboard_to_possitio_unit":"22",
"type_of_position_fixing_divice":"1",
"ETA":null,
"destination":"",
"last_static_draught":"0",
"DTE":"127"
}
]
本ShipDetail
类:
public class ShipDetail {
private String IdMessage, IdSession, Time_Stamp_System, Nmea_String, Processed;
private String Mmsi, Ais_Version, Imo_Number, Callsign, Name, Type_Of_Ship_And_Cargo;
private String Bow_To_Position_Unit, Stern_To_Position_Unit, Port_To_Position_Unit, Starboard_To_Position_Unit,
Type_Of_Position_Fixing_Device;
private String Eta, Destination, Last_Ship_Draught, Dte;
public String getMmsi() {
return Mmsi;
}
public String toString() {
return "\n Id Message : " + IdMessage + "\n Id Session : " + IdSession + "\n Time Stam System : "
+ Time_Stamp_System + "\n NMEA String : " + Nmea_String + "\n Processed : " + Processed + "\n MMSI : "
+ Mmsi + "\n AIS Version : " + Ais_Version + "\n IMO Number : " + Imo_Number + "\n Call Sign : "
+ Callsign + "\n Name : " + Name + "\n Type Of Ship And Cargo : " + Type_Of_Ship_And_Cargo
+ "\n Bow To Position Unit : " + Bow_To_Position_Unit + "\n Stern To Position Unit : "
+ Stern_To_Position_Unit + "\n Port To Position Unit : " + Port_To_Position_Unit
+ "\n Starboard To Position Fixing Device : " + Starboard_To_Position_Unit
+ "\n Type Of Position Fixing Device : " + Type_Of_Position_Fixing_Device + "\n ETA : " + Eta
+ "\n Destination : " + Destination + "\n Last Ship Draught : " + Last_Ship_Draught + "\n DTE : " + Dte;
}
}
您的Gson映射与给定的JSON不匹配。默认情况下,Gson通过 确切 名称将JSON属性映射到目标映射中的相应字段。看一眼:
"idmessage":"27301"
和
private String IdMessage
属性名称大小写和字段名称大小写不匹配。您需要的是正确映射JSON。要么:
private String idmessage
或通过覆盖名称匹配(这更适合Java命名约定):
@SerializedName("idmessage")
private String idMessage;
注意每行一个字段。为了分别注释每个字段,这是必需的。或者,如果可能,在Java和JSON中同时使用camelCase。
首先,我想说这是一个大学项目。 我有三节课<代码>订单抽象类和从订单继承的和类。 我使用Gson序列化/反序列化子类,但我遇到了一点问题。订单类有一个字段,gson使用该字段来确定订单类型,DineIn或Delivery。 序列化工作得很好。问题是,每当我尝试反序列化时,类型字段值都不会读取,并且总是设置为null,即使它存在于JSON文件中。当有很多字段时,就会发生这种情况,因为当我尝试在较小的
我想在Java中反序列化包含空值的json字符串。我想将对象反序列化为对象。json字符串类似于: 当我反序列化使用 由于对象中的that,我得到一个空指针异常。我如何指示Gson忽略空值的反序列化?
我想使用Gson将JSON反序列化为对象。我已经定义了相应的类,其中一些类的对象包含在其他对象中。在尝试反序列化整个JSON时,我得到了空值,所以我开始将其拆分。 我已经到了所有低级类都支持自己的地步,但是当我试图反序列化成一个包含那个较小对象的实例的对象时,所有的东西都返回为null。 我的部分JSON: UserProfile类: UPfield类: 用户类: Ufield类: 我的主要观点是
问题内容: 我想通过Google Gson传输列表对象,但是我不知道如何反序列化泛型类型。 看了这个之后我尝试了什么(BalusC的答案): 但是后来我在日食中遇到了一个错误,说“新的List(){}类型必须实现继承的抽象方法…”,如果我使用快速修复方法,则会得到20个以上的方法存根的怪物。 我很确定有一个更简单的解决方案,但是我似乎找不到它! 编辑: 我现在有 但是,我确实在“ fromJson
问题内容: 由于要执行处理的业务逻辑,因此我正在实现自定义。但是某些部分可以解析为标准方式。这是否可能- 我自己处理一些元素,并让一些嵌套元素自动处理? 这是JSON: 这是项的自定义反序列化器: 现在,我想让GSON解析枚举。我可以自己完成,这只是几行代码,但是我更愿意库做很多。 问题答案: …但是我希望图书馆尽其所能。 好吧,只需使用Gson。 有数据传输对象模式,尤其是Gson映射类,可以完
我有以下JSON示例: 我想使用GSON来反序列化这个JSON字符串,并只获取“famousId”成员的值。 我已经看过了其他答案,似乎我绝对需要为此创建类。 有没有可能不映射POJO,使用JsonParser,JsonElement,JsonArray等反序列化?我已经尝试了几种排列,但没有成功。 我也尝试过以下代码,但也没有按预期工作: 不幸的是,这也不起作用,所以我想一个两部分的问题。。。可