Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON/GSON解析为某些属性返回空值_Java_Json_Gson - Fatal编程技术网

Java JSON/GSON解析为某些属性返回空值

Java JSON/GSON解析为某些属性返回空值,java,json,gson,Java,Json,Gson,我一直在尝试使用GSON解析一个JSON文件来显示内容。对于shipname等属性,我得到了适当的结果,但对于其他许多属性,如typeOfShipCargo、AISversion等,我不断得到null值 我已经给出了下面的大部分代码。请让我知道是否需要添加任何其他内容。干杯 JSON文件 [ { "idmessage": "27301", "idsession": "362", "time_stamp_system": "2017-01-20 14:51:14",

我一直在尝试使用GSON解析一个JSON文件来显示内容。对于ship
name
等属性,我得到了适当的结果,但对于其他许多属性,如
typeOfShipCargo
AISversion
等,我不断得到
null

我已经给出了下面的大部分代码。请让我知道是否需要添加任何其他内容。干杯

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": "Test",
    "destination": "",
    "last_static_draught": "0",
    "DTE": "127"
  }
]
父类

public class Ship {
    private String idmsg;
    private String idsession;
    private String systemTime;
    private String NMEAstring;
    private String processed;
    private String MMSI;

    public Ship(){}

    public Ship(String idmsg, String idsession, String systemTime, String NMEAstring, String processed, String MMSI) {
        this.idmsg = idmsg;
        this.idsession = idsession;
        this.systemTime = systemTime;
        this.NMEAstring = NMEAstring;
        this.processed = processed;
        this.MMSI = MMSI;
    }
//Getters and setters
}
儿童班

public class ShipDetails extends Ship {
    private String AISversion;
    private String IMOnumber;
    private String callSign;
    private String name;
    private String typeOfShipCargo;
    private String bowToPositionUnit;
    private String sternToPositionUnit;
    private String portToPositionUnit;
    private String starboardToPositionUnit;
    private String typeOfPositionFixingDevice;
    private String eta;
    private String destination;
    private String lastStaticDraught;
    private String dte;

    public ShipDetails(String idmsg, String idsession, String systemTime, String NMEAstring, String processed,
                       String MMSI, String AISversion, String IMOnumber, String callSign, String name, The rest...) {
        super(idmsg, idsession, systemTime, NMEAstring, processed, MMSI);
        this.AISversion = AISversion;
        this.IMOnumber = IMOnumber;
        this.callSign = callSign;
        this.name = name;
        this.typeOfShipCargo = typeOfShipCargo;
        this.bowToPositionUnit = bowToPositionUnit;
        this.sternToPositionUnit = sternToPositionUnit;
        this.portToPositionUnit = portToPositionUnit;
        this.starboardToPositionUnit = starboardToPositionUnit;
        this.typeOfPositionFixingDevice = typeOfPositionFixingDevice;
        this.eta = eta;
        this.destination = destination;
        this.lastStaticDraught = lastStaticDraught;
        this.dte = dte;
    }
//getters and setters
}
系统类

public class ShipController {

    private static ArrayList<ShipDetails> shipDet = new ArrayList<ShipDetails>();

    public static void main(String[] args) throws IOException{
        File inStream = new File("details.json");

        Scanner read = new Scanner(inStream);
        BufferedReader bf = new BufferedReader(new FileReader("positions.json"));

        String json = "";
        while (read.hasNext())
        {
            json += read.nextLine();
        }

        Gson gson = new Gson();
        ShipDetails[] tempShip = gson.fromJson(json, ShipDetails[].class);

        if(tempShip == null)
            System.out.println("Null");
        shipDet.addAll(Arrays.asList(tempShip));
        shipPos.addAll(Arrays.asList(tempDetails));

        read.close();

//Printing the attribute values. For AIS version it retuns null while for name it doesn't.
        for (ShipDetails d : shipDet)
        {
            System.out.println(d.getAISversion());
        }
}
公共类ShipController{
私有静态ArrayList shipDet=新ArrayList();
公共静态void main(字符串[]args)引发IOException{
File inStream=新文件(“details.json”);
扫描仪读取=新扫描仪(流内);
BufferedReader bf=新的BufferedReader(新的文件阅读器(“positions.json”);
字符串json=“”;
while(read.hasNext())
{
json+=read.nextLine();
}
Gson Gson=新的Gson();
ShipDetails[]tempShip=gson.fromJson(json,ShipDetails[].class);
if(tempShip==null)
System.out.println(“空”);
shipDet.addAll(Arrays.asList(tempShip));
shipPos.addAll(Arrays.asList(tempDetails));
read.close();
//打印属性值。对于AIS版本,它返回null,而对于name,它不返回null。
用于(装运详情d:shipDet)
{
System.out.println(d.getAISversion());
}
}

这些字段的名称与Java类中的字段名称(或其对应的getter和setter)不匹配。您可以使用注释为字段使用非默认名称:

 @SerializedName("type_of_ship_and_cargo")
 //@SerializedName(alternate = "type_of_ship_and_cargo")
 private String typeOfShipCargo;

有时,
alternate
注释的一部分足以使反序列化变得灵活,但使用默认的序列化命名。

该死的,我一直在绞尽脑汁想找出我的代码有什么问题。非常感谢!