Example usage for com.google.gson JsonElement isJsonNull

List of usage examples for com.google.gson JsonElement isJsonNull

Introduction

In this page you can find the example usage for com.google.gson JsonElement isJsonNull.

Prototype

public boolean isJsonNull() 

Source Link

Document

provides check for verifying if this element represents a null value or not.

Usage

From source file:com.floragunn.searchguard.HeaderAwareJestHttpClient.java

License:Apache License

private boolean isJson(final String data) {
    try {/*from  w  w w . j ava 2 s . c o  m*/
        final JsonElement result = new JsonParser().parse(data);
        return !result.isJsonNull();
    } catch (final JsonSyntaxException e) {
        //Check if this is a bulk request
        final String[] bulkRequest = data.split("\n");
        return bulkRequest.length >= 1;
    }
}

From source file:com.fooock.shodan.model.banner.BannerDeserializer.java

License:Open Source License

@Override
public List<Banner> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    final List<Banner> banners = new ArrayList<>();
    if (json.isJsonNull()) {
        return banners;
    }/*from w w  w .j av a  2 s .c o  m*/
    JsonArray jsonArray = json.getAsJsonArray();
    if (jsonArray.isJsonNull()) {
        return banners;
    }
    for (JsonElement element : jsonArray) {
        JsonObject jsonObject = element.getAsJsonObject();
        JsonElement port = jsonObject.get("port");
        JsonElement ip = jsonObject.get("ip");
        JsonElement asn = jsonObject.get("asn");
        JsonElement data = jsonObject.get("data");
        JsonElement ipStr = jsonObject.get("ip_str");
        JsonElement ipv6 = jsonObject.get("ipv6");
        JsonElement timestamp = jsonObject.get("timestamp");
        JsonElement hostnames = jsonObject.get("hostnames");
        JsonElement domains = jsonObject.get("domains");
        JsonElement location = jsonObject.get("location");
        JsonElement options = jsonObject.get("opts");
        JsonElement metadata = jsonObject.get("_shodan");
        JsonElement ssl = jsonObject.get("ssl");

        JsonElement uptime = jsonObject.get("uptime");
        JsonElement link = jsonObject.get("link");
        JsonElement title = jsonObject.get("title");
        JsonElement html = jsonObject.get("html");
        JsonElement product = jsonObject.get("product");
        JsonElement version = jsonObject.get("version");
        JsonElement isp = jsonObject.get("isp");
        JsonElement os = jsonObject.get("os");
        JsonElement transport = jsonObject.get("transport");
        JsonElement devicetype = jsonObject.get("devicetype");
        JsonElement info = jsonObject.get("info");
        JsonElement cpe = jsonObject.get("cpe");

        final Banner banner = new Banner();
        if (port == null || port.isJsonNull()) {
            banner.setPort(0);
        } else {
            banner.setPort(port.getAsInt());
        }

        if (ip == null || ip.isJsonNull()) {
            banner.setIp(0);
        } else {
            banner.setIp(ip.getAsLong());
        }

        if (asn == null || asn.isJsonNull()) {
            banner.setAsn("unknown");
        } else {
            banner.setAsn(asn.getAsString());
        }

        if (data == null || data.isJsonNull()) {
            banner.setData("unknown");
        } else {
            banner.setData(data.getAsString());
        }

        if (ipStr == null || ipStr.isJsonNull()) {
            banner.setIpStr("unknown");
        } else {
            banner.setIpStr(ipStr.getAsString());
        }

        if (ipv6 == null || ipv6.isJsonNull()) {
            banner.setIpv6("unknown");
        } else {
            banner.setIpv6(ipv6.getAsString());
        }

        if (timestamp == null || timestamp.isJsonNull()) {
            banner.setTimestamp("unknown");
        } else {
            banner.setTimestamp(timestamp.getAsString());
        }

        if (hostnames == null || hostnames.isJsonNull()) {
            banner.setHostnames(new String[0]);
        } else {
            JsonArray hostnamesAsJsonArray = hostnames.getAsJsonArray();
            String[] hostnameArray = new String[hostnamesAsJsonArray.size()];
            for (int i = 0; i < hostnamesAsJsonArray.size(); i++) {
                hostnameArray[i] = hostnamesAsJsonArray.get(i).getAsString();
            }
            banner.setHostnames(hostnameArray);
        }

        if (domains == null || domains.isJsonNull()) {
            banner.setDomains(new String[0]);
        } else {
            JsonArray domainsAsJsonArray = domains.getAsJsonArray();
            String[] domainsArray = new String[domainsAsJsonArray.size()];
            for (int i = 0; i < domainsAsJsonArray.size(); i++) {
                domainsArray[i] = domainsAsJsonArray.get(i).getAsString();
            }
            banner.setDomains(domainsArray);
        }

        if (location == null || location.isJsonNull()) {
            banner.setLocation(new Location());
        } else {
            JsonObject locationAsJsonObject = location.getAsJsonObject();
            JsonElement areaCode = locationAsJsonObject.get("area_code");
            JsonElement latitude = locationAsJsonObject.get("latitude");
            JsonElement longitude = locationAsJsonObject.get("longitude");
            JsonElement city = locationAsJsonObject.get("city");
            JsonElement regionCode = locationAsJsonObject.get("region_code");
            JsonElement postalCode = locationAsJsonObject.get("postal_code");
            JsonElement dmaCode = locationAsJsonObject.get("dma_code");
            JsonElement countryCode = locationAsJsonObject.get("country_code");
            JsonElement countryCode3 = locationAsJsonObject.get("country_code3");
            JsonElement countryName = locationAsJsonObject.get("country_name");

            Location locationObject = new Location();
            if (areaCode == null || areaCode.isJsonNull()) {
                locationObject.setAreaCode(0);
            } else {
                locationObject.setAreaCode(areaCode.getAsInt());
            }

            if (latitude == null || latitude.isJsonNull()) {
                locationObject.setLatitude(0.0);
            } else {
                locationObject.setLatitude(latitude.getAsDouble());
            }

            if (longitude == null || location.isJsonNull()) {
                locationObject.setLongitude(0.0);
            } else {
                locationObject.setLongitude(longitude.getAsDouble());
            }

            if (city == null || city.isJsonNull()) {
                locationObject.setCity("unknown");
            } else {
                locationObject.setCity(city.getAsString());
            }

            if (regionCode == null || regionCode.isJsonNull()) {
                locationObject.setRegionCode("unknown");
            } else {
                locationObject.setRegionCode(regionCode.getAsString());
            }

            if (postalCode == null || postalCode.isJsonNull()) {
                locationObject.setPostalCode("unknown");
            } else {
                locationObject.setPostalCode(postalCode.getAsString());
            }

            if (dmaCode == null || dmaCode.isJsonNull()) {
                locationObject.setDmaCode("unknown");
            } else {
                locationObject.setDmaCode(dmaCode.getAsString());
            }

            if (countryCode == null || countryCode.isJsonNull()) {
                locationObject.setCountryCode("unknown");
            } else {
                locationObject.setCountryCode(countryCode.getAsString());
            }

            if (countryCode3 == null || countryCode3.isJsonNull()) {
                locationObject.setCountryCode3("unknown");
            } else {
                locationObject.setCountryCode3(countryCode3.getAsString());
            }

            if (countryName == null || countryName.isJsonNull()) {
                locationObject.setCountryName("unknown");
            } else {
                locationObject.setCountryName(countryName.getAsString());
            }

            banner.setLocation(locationObject);
        }

        final Options opts = new Options();
        if (options == null || options.isJsonNull()) {
            opts.setRaw("unknown");
        } else {
            JsonObject object = options.getAsJsonObject();
            JsonElement raw = object.get("raw");
            if (raw == null || raw.isJsonNull()) {
                opts.setRaw("unknown");
            } else {
                opts.setRaw(raw.getAsString());
            }
        }
        banner.setOptions(opts);

        final Metadata shodanMetadata = new Metadata();
        if (metadata == null || metadata.isJsonNull()) {
            shodanMetadata.setCrawler("unknown");
            shodanMetadata.setId("unknown");
            shodanMetadata.setModule("unknown");
        } else {
            JsonObject metadataAsJsonObject = metadata.getAsJsonObject();
            JsonElement crawler = metadataAsJsonObject.get("crawler");
            JsonElement id = metadataAsJsonObject.get("id");
            JsonElement module = metadataAsJsonObject.get("module");

            if (crawler == null || crawler.isJsonNull()) {
                shodanMetadata.setCrawler("unknown");
            } else {
                shodanMetadata.setCrawler(crawler.getAsString());
            }

            if (id == null || id.isJsonNull()) {
                shodanMetadata.setId("unknown");
            } else {
                shodanMetadata.setId(id.getAsString());
            }

            if (module == null || module.isJsonNull()) {
                shodanMetadata.setModule("unknown");
            } else {
                shodanMetadata.setModule(module.getAsString());
            }
        }
        banner.setMetadata(shodanMetadata);

        final SslInfo sslInfo = new SslInfo();
        if (ssl == null || ssl.isJsonNull()) {
            banner.setSslEnabled(false);
        } else {
            banner.setSslEnabled(true);

            JsonObject sslAsJsonObject = ssl.getAsJsonObject();
            JsonElement chain = sslAsJsonObject.get("chain");
            JsonArray chainAsJsonArray = chain.getAsJsonArray();
            String[] chainArray = new String[chainAsJsonArray.size()];
            for (int i = 0; i < chainAsJsonArray.size(); i++) {
                chainArray[i] = chainAsJsonArray.get(i).getAsString();
            }
            sslInfo.setChain(chainArray);

            JsonElement versions = sslAsJsonObject.get("versions");
            JsonArray versionAsJsonArray = versions.getAsJsonArray();
            String[] versionsArray = new String[versionAsJsonArray.size()];
            for (int i = 0; i < versionsArray.length; i++) {
                versionsArray[i] = versionAsJsonArray.get(i).getAsString();
            }
            sslInfo.setVersions(versionsArray);

            JsonElement cipher = sslAsJsonObject.get("cipher");
            JsonObject cipherAsJsonObject = cipher.getAsJsonObject();
            JsonElement bits = cipherAsJsonObject.get("bits");
            JsonElement cipherVersion = cipherAsJsonObject.get("version");
            JsonElement name = cipherAsJsonObject.get("name");

            final Cipher cipherObject = new Cipher();
            if (bits != null && !bits.isJsonNull()) {
                cipherObject.setBits(bits.getAsInt());
            }
            if (cipherVersion != null && !cipherVersion.isJsonNull()) {
                cipherObject.setVersion(cipherVersion.getAsString());
            } else {
                cipherObject.setVersion("unknown");
            }
            if (name == null || name.isJsonNull()) {
                cipherObject.setName("unknown");
            } else {
                cipherObject.setName(name.getAsString());
            }
            sslInfo.setCipher(cipherObject);

            JsonElement dhparams = sslAsJsonObject.get("dhparams");
            if (dhparams != null && !dhparams.isJsonNull()) {
                JsonObject dhparamsAsJsonObject = dhparams.getAsJsonObject();

                JsonElement bits1 = dhparamsAsJsonObject.get("bits");
                JsonElement prime = dhparamsAsJsonObject.get("prime");
                JsonElement publicKey = dhparamsAsJsonObject.get("public_key");
                JsonElement generator = dhparamsAsJsonObject.get("generator");
                JsonElement fingerprint = dhparamsAsJsonObject.get("fingerprint");

                final DiffieHellmanParams diffieHellmanParams = new DiffieHellmanParams();
                if (bits1 != null && !bits1.isJsonNull()) {
                    diffieHellmanParams.setBits(bits1.getAsInt());
                }
                if (prime == null || prime.isJsonNull()) {
                    diffieHellmanParams.setPrime("unknown");
                } else {
                    diffieHellmanParams.setPrime(prime.getAsString());
                }
                if (publicKey == null || publicKey.isJsonNull()) {
                    diffieHellmanParams.setPublicKey("unknown");
                } else {
                    diffieHellmanParams.setPublicKey(publicKey.getAsString());
                }
                if (generator == null || generator.isJsonNull()) {
                    diffieHellmanParams.setGenerator("unknown");
                } else {
                    diffieHellmanParams.setGenerator(generator.getAsString());
                }
                if (fingerprint == null || fingerprint.isJsonNull()) {
                    diffieHellmanParams.setFingerprint("unknown");
                } else {
                    diffieHellmanParams.setFingerprint(fingerprint.getAsString());
                }
                sslInfo.setDiffieHellmanParams(diffieHellmanParams);
            }
        }
        banner.setSslInfo(sslInfo);

        if (uptime == null || uptime.isJsonNull()) {
            banner.setUptime(0);
        } else {
            banner.setUptime(uptime.getAsInt());
        }

        if (link == null || link.isJsonNull()) {
            banner.setLink("unknown");
        } else {
            banner.setLink(link.getAsString());
        }

        if (title == null || title.isJsonNull()) {
            banner.setTitle("unknown");
        } else {
            banner.setTitle(title.getAsString());
        }

        if (html == null || html.isJsonNull()) {
            banner.setHtml("unknown");
        } else {
            banner.setHtml(html.getAsString());
        }

        if (product == null || product.isJsonNull()) {
            banner.setProduct("unknown");
        } else {
            banner.setProduct(product.getAsString());
        }

        if (version == null || version.isJsonNull()) {
            banner.setVersion("unknown");
        } else {
            banner.setVersion(version.getAsString());
        }

        if (isp == null || isp.isJsonNull()) {
            banner.setIsp("unknown");
        } else {
            banner.setIsp(isp.getAsString());
        }

        if (os == null || os.isJsonNull()) {
            banner.setOs("unknown");
        } else {
            banner.setOs(os.getAsString());
        }

        if (transport == null || transport.isJsonNull()) {
            banner.setTransport("unknown");
        } else {
            banner.setTransport(transport.getAsString());
        }

        if (devicetype == null || devicetype.isJsonNull()) {
            banner.setDeviceType("unknown");
        } else {
            banner.setDeviceType(devicetype.getAsString());
        }

        if (info == null || info.isJsonNull()) {
            banner.setInfo("unknown");
        } else {
            banner.setInfo(info.getAsString());
        }

        if (cpe == null || cpe.isJsonNull()) {
            banner.setCpe(new String[0]);
        } else {
            // cpe can be string or string[]. Fix for #4
            if (cpe.isJsonObject()) {
                banner.setCpe(new String[] { cpe.getAsString() });

            } else {
                JsonArray cpeAsJsonArray = cpe.getAsJsonArray();
                String[] cpeArray = new String[cpeAsJsonArray.size()];
                for (int i = 0; i < cpeAsJsonArray.size(); i++) {
                    cpeArray[i] = cpeAsJsonArray.get(i).getAsString();
                }
                banner.setCpe(cpeArray);
            }
        }

        banners.add(banner);
    }
    return banners;
}

From source file:com.fooock.shodan.model.dns.DnsHostnameDeserializer.java

License:Open Source License

@Override
public List<DnsHostname> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    final List<DnsHostname> dnsHostnames = new ArrayList<>();

    if (json.isJsonNull()) {
        return dnsHostnames;
    }//from   w w w  . ja v  a2s  . c  om
    JsonObject jsonObject = json.getAsJsonObject();
    if (jsonObject == null) {
        return dnsHostnames;
    }
    for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();

        if (value == null || value.isJsonNull()) {
            String[] unknown = new String[] { "" };
            DnsHostname dnsHostname = new DnsHostname(key, unknown);
            dnsHostnames.add(dnsHostname);
            continue;
        }

        String hostnameString = value.getAsString();
        if (hostnameString != null && !hostnameString.isEmpty()) {
            String[] hostnames = hostnameString.split(",");

            DnsHostname dnsHostname = new DnsHostname(key, hostnames);
            dnsHostnames.add(dnsHostname);
        }
    }
    return dnsHostnames;
}

From source file:com.fooock.shodan.model.dns.DnsIpDeserializer.java

License:Open Source License

@Override
public List<DnsIp> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    final List<DnsIp> dns = new ArrayList<>();

    if (json.isJsonNull()) {
        return dns;
    }//from w w  w .j av a 2 s  . c o m
    JsonObject jsonObject = json.getAsJsonObject();
    for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();

        DnsIp dnsIp = new DnsIp(key, value.getAsString());
        dns.add(dnsIp);
    }
    return dns;
}

From source file:com.fooock.shodan.model.exploit.ExploitDeserializer.java

License:Open Source License

@Override
public List<Exploit> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    List<Exploit> exploits = new ArrayList<>();
    try {//from   w w w.j a  v a 2  s  .  co  m
        JsonObject jsonObject = json.getAsJsonObject();
        JsonElement matches = jsonObject.get("matches");
        if (matches == null || matches.isJsonNull()) {
            return exploits;
        }
        JsonArray array = matches.getAsJsonArray();
        if (array == null || array.isJsonNull()) {
            return exploits;
        }
        for (JsonElement element : array) {
            Exploit exploit = parseJsonExploit(element);
            exploits.add(exploit);
        }
    } catch (IllegalStateException e) {
        // parsing the array of exploits directly, used when search with facets
        JsonArray elements = json.getAsJsonArray();
        if (elements == null || elements.isJsonNull()) {
            return exploits;
        }
        for (JsonElement element : elements) {
            Exploit exploit = parseJsonExploit(element);
            exploits.add(exploit);
        }
    }
    return exploits;
}

From source file:com.fooock.shodan.model.exploit.ExploitDeserializer.java

License:Open Source License

private Exploit parseJsonExploit(JsonElement json) {
    Exploit exploit = new Exploit();

    JsonObject jsonObject = json.getAsJsonObject();

    String id = jsonObject.get("_id").getAsString();
    String desc = jsonObject.get("description").getAsString();
    String source = jsonObject.get("source").getAsString();

    JsonElement jsonAuthor = jsonObject.get("author");
    if (jsonAuthor != null && !jsonAuthor.isJsonNull()) {
        if (jsonAuthor.isJsonPrimitive()) {
            String author = jsonAuthor.getAsString();
            exploit.setAuthor(author);/*w ww.j a  v  a  2  s. co  m*/
        } else {
            JsonArray array = jsonAuthor.getAsJsonArray();
            if (array != null) {
                String resAuthors = "";
                for (JsonElement element : array) {
                    resAuthors += ", " + element.getAsString();
                }
                exploit.setAuthor(resAuthors);
            }
        }
    }

    JsonElement jsonCode = jsonObject.get("code");
    if (jsonCode != null && !jsonCode.isJsonNull()) {
        String code = jsonCode.getAsString();
        exploit.setCode(code);
    }

    JsonElement jsonType = jsonObject.get("type");
    if (jsonType != null && !jsonType.isJsonNull()) {
        String type = jsonType.getAsString();
        exploit.setType(type);
    }

    JsonElement jsonVersion = jsonObject.get("version");
    if (jsonVersion != null && !jsonVersion.isJsonNull()) {
        String version = jsonVersion.getAsString();
        exploit.setVersion(version);
    }

    JsonElement jsonPrivileged = jsonObject.get("privileged");
    if (jsonPrivileged != null && !jsonPrivileged.isJsonNull()) {
        boolean privileged = jsonPrivileged.getAsBoolean();
        exploit.setPrivileged(privileged);
    }

    JsonElement jsonPort = jsonObject.get("port");
    if (jsonPort != null && !jsonPort.isJsonNull()) {
        int port = jsonPort.getAsInt();
        exploit.setPort(port);
    }

    JsonArray jsonBid = jsonObject.getAsJsonArray("bid");
    if (jsonBid != null) {
        String[] bid = new String[jsonBid.size()];
        for (int i = 0; i < jsonBid.size(); i++) {
            bid[i] = jsonBid.get(i).getAsString();
        }
        exploit.setBid(bid);
    }

    JsonArray jsonCve = jsonObject.getAsJsonArray("cve");
    if (jsonCve != null) {
        String[] cve = new String[jsonCve.size()];
        for (int i = 0; i < jsonCve.size(); i++) {
            cve[i] = jsonCve.get(i).getAsString();
        }
        exploit.setCve(cve);
    }

    JsonArray jsonMsb = jsonObject.getAsJsonArray("msb");
    if (jsonMsb != null) {
        String[] msb = new String[jsonMsb.size()];
        for (int i = 0; i < jsonMsb.size(); i++) {
            msb[i] = jsonMsb.get(i).getAsString();
        }
        exploit.setMsb(msb);
    }

    JsonArray jsonOsvdb = jsonObject.getAsJsonArray("osvdb");
    if (jsonOsvdb != null) {
        String[] osvdb = new String[jsonOsvdb.size()];
        for (int i = 0; i < jsonOsvdb.size(); i++) {
            osvdb[i] = jsonOsvdb.get(i).getAsString();
        }
        exploit.setOsvdb(osvdb);
    }

    try {
        JsonArray jsonPlatform = jsonObject.getAsJsonArray("platform");
        if (jsonPlatform != null && jsonPlatform.isJsonArray()) {
            String[] platform = new String[jsonPlatform.size()];
            for (int i = 0; i < jsonPlatform.size(); i++) {
                platform[i] = jsonPlatform.get(i).getAsString();
            }
            exploit.setPlatform(platform);
        }
    } catch (ClassCastException err) {
        JsonElement platPrimitive = jsonObject.get("platform");
        if (platPrimitive != null && !platPrimitive.isJsonNull()) {
            exploit.setPlatform(new String[] { platPrimitive.getAsString() });
        }
    }

    exploit.setId(id);
    exploit.setDescription(desc);
    exploit.setSource(source);

    return exploit;
}

From source file:com.fooock.shodan.model.host.FacetReportDeserializer.java

License:Open Source License

@Override
public FacetReport deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    if (json.isJsonNull()) {
        return new FacetReport(0, Collections.emptyList());
    }//from   w w w . ja  va  2s . c  om
    JsonObject jsonObject = json.getAsJsonObject();
    if (jsonObject == null || jsonObject.isJsonNull()) {
        return new FacetReport(0, Collections.emptyList());
    }
    JsonElement element = jsonObject.get("matches");
    if (element == null || element.isJsonNull()) {
        // parse directly facets, this is because when searching host with facets
        // the banners are parsed independently
        List<Facet> facets = getFacets(jsonObject);
        return new FacetReport(facets.size(), facets);

    } else {
        JsonElement totalElement = jsonObject.get("total");
        return parseFacetReport(jsonObject, totalElement);
    }
}

From source file:com.fooock.shodan.model.protocol.ProtocolDeserializer.java

License:Open Source License

@Override
public List<Protocol> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    final List<Protocol> protocols = new ArrayList<>();

    if (json.isJsonNull()) {
        return protocols;
    }//from w  w  w  .  j a  va 2 s  .  co  m
    JsonObject jsonObject = json.getAsJsonObject();
    if (jsonObject.isJsonNull()) {
        return protocols;
    }

    for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();

        Protocol protocol = new Protocol(key, value.getAsString());
        protocols.add(protocol);
    }
    return protocols;
}

From source file:com.fooock.shodan.model.user.HttpHeaderDeserializer.java

License:Open Source License

@Override
public HttpHeader deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
    if (json.isJsonNull()) {
        return new HttpHeader(Collections.emptyList());
    }/*from   w ww .  ja va2  s  . c o m*/
    JsonObject jsonObject = json.getAsJsonObject();
    if (jsonObject.isJsonNull()) {
        return new HttpHeader(Collections.emptyList());
    }

    final List<Value> values = new ArrayList<>();
    for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();

        values.add(new Value(key, value.getAsString()));
    }
    return new HttpHeader(values);
}

From source file:com.gemapps.saidit.networking.deserializer.TopEntriesDeserializer.java

License:Apache License

private String getBeforeTag(JsonElement data) {
    JsonElement before = data.getAsJsonObject().get("before");
    return !before.isJsonNull() ? before.getAsString() : "";
}