如何使用GSON库在Java对象和JSON文件之间映射字段名称

时间:2019-06-17 13:59:28

标签: java json gson

我正在将JSON对象解析为Java对象,但是某些字段为null。

结果

//Printed object after parsing, some fields are null 
{host_ip='null', open=false, host_fqdn='null', nmap_results='null', cvss_vector='cvss2#av:n/ac:l/au:n/c:c/i:c/a:c', cvss=10.0, attackvector='n', list_
of_ports=null, ports___port='null', plugin_family='Windows', scanner_name='Local Scanner', operating_system='null', plugin_name='Microsoft Windows XP Unsupported
Installation Detection'

Gson库的用途:

 for (int v = 0; v < splunk_results_as_Array.size(); v++)
                    {
                        String vuln_as_string = splunk_results_as_Array.get(v).toString();
                        Splunk_data splunkdata = new Gson().fromJson(vuln_as_string, Splunk_data.class); // parsing happens here
                                   System.out.print("\n Splunk : Splunk Java Object created \n" + splunkdata.toString());
                        splunkdata.ports_to_List();
                        splunkdata.setDataType(dataType);
                        list_of_Hosts.add(splunkdata);
                    }

Json对象为字符串

"result":
{"cvss_vector":"cvss2#av:n/ac:l/au:n/c:c/i:c/a:c","host-ip":"XX.XX.XX.XX","plugin_family":"Windows","scanner_name":"Local Scanner","plugin_name":"Microsoft RDP RCE (CVE-2019-0708) (uncredentialed check)","hostname":"XX.XX.XX.XX","cvss":"10.0","attackvector":"n","ports{}.port":"3389"}
}

您会看到以下字段:host-ip和ports {}。端口确实有价值。

使用的分类:

public class Splunk_data
{
    private String host_ip;
    private boolean open;
    private String host_fqdn;
    private String nmap_results;
    private String cvss_vector;
    private double cvss;
    private String attackvector;    
    private String ports_port;
    private String plugin_family;
    private String scanner_name;
    private String operating_system;
    private String plugin_name;
     }

我认为导致问题的原因是host_ip与host-ip不匹配,但是我Java无法使用'-',所以我使用了'_'。

有一种解决方法吗?

1 个答案:

答案 0 :(得分:0)

要为变量使用与JSON中的实际键不同的名称,可以使用@Serialized批注。

@Serialized("host-ip")
private String host_ip;

这将起作用并将您的host-ip解析为字符串。