简体   繁体   中英

How to convert string to Json/maps

I want to convert below string to either json or maps to read individual messages, so how can I achieve that.

 {
  "import_set"XXXX00123",
  "staging_table": "u_xx_imp_set_xxx_yyy",
  "result": [
    {
      "transform_map": "EE Trsfrm test ",
      "status": "error",
      "error_message": "Unable to resolve ",
      "status_message": "Unable to resolve target record"
    }
  ]
}

Here I want to read status , error_message etc.

You can use ObjectMapper or Gson. ObjectMapper code to parse the string into a Map:

private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
Map<String, Object> map = OBJECT_MAPPER.readValue("jsonString",
            new TypeReference<Map<String, Object>>() {})

Gson code:

Gson gson = new Gson();
Map<String, Object> myMap = gson.fromJson("jsonString", 
  new TypeReference<Map<String, Object>>() {}.getType());

There are a plenty of libraries that allow you to parse JSON. Probably, the most popular two are Gson and Jackson . Here are the examples of parsing a string into a JSON node with them.

Gson

public static void main(String[] args) {
    final JsonParser parser = new JsonParser();
    final JsonObject jsonObject = parser.parse("{ \"import_set\": \"ISET0010118\", \"staging_table\": \"u_ee_imp_set_asset_nmi\", " +
                                               "\"result\": [{ \"transform_map\": \"EE Trsfrm Map Asset NMI \", \"status\": " +
                                               "\"error\", \"error_message\": \"Unable to resolve target record, coalesce values not " +
                                               "present: u_assetid; Invalid table \", \"status_message\": \"Unable to resolve target " +
                                               "record, coalesce values not present: u_assetid\" }] }").getAsJsonObject();

    System.out.println(jsonObject);
    System.out.println(jsonObject.get("result").getAsJsonArray().get(0).getAsJsonObject().get("status").getAsString());
    System.out.println(jsonObject.get("result").getAsJsonArray().get(0).getAsJsonObject().get("error_message").getAsString());
}

Jackson

public static void main(String[] args) throws IOException {
    final ObjectMapper mapper = new ObjectMapper();
    final JsonNode jsonNode = mapper.readTree("{ \"import_set\": \"ISET0010118\", \"staging_table\": \"u_ee_imp_set_asset_nmi\", " +
                                              "\"result\": [{ " +
                                              "\"transform_map\": \"EE Trsfrm Map Asset NMI \", \"status\": \"error\", " +
                                              "\"error_message\": \"Unable to resolve " +
                                              "target record, coalesce values not present: u_assetid; Invalid table \", " +
                                              "\"status_message\": \"Unable to resolve" +
                                              " target record, coalesce values not present: u_assetid\" }] }");

    System.out.println(jsonNode);
    System.out.println(jsonNode.get("result").get(0).get("status").asText());
    System.out.println(jsonNode.get("result").get(0).get("error_message").asText());
}

Both examples will print:

{"import_set":"ISET0010118","staging_table":"u_ee_imp_set_asset_nmi","result":[{"transform_map":"EE Trsfrm Map Asset NMI ","status":"error","error_message":"Unable to resolve target record, coalesce values not present: u_assetid; Invalid table ","status_message":"Unable to resolve target record, coalesce values not present: u_assetid"}]}
error
Unable to resolve target record, coalesce values not present: u_assetid; Invalid table 

Or you can create a POJO to host your data and parse string right into objests:

Gson

public class Demo {
    public static void main(String[] args) throws IOException {
        final Gson gson = new Gson();
        final Results results = gson.fromJson("{ \"import_set\": \"ISET0010118\", \"staging_table\": \"u_ee_imp_set_asset_nmi\", " +
                                              "\"result\": [{ " +
                                              "\"transform_map\": \"EE Trsfrm Map Asset NMI \", \"status\": \"error\", " +
                                              "\"error_message\": \"Unable to resolve " +
                                              "target record, coalesce values not present: u_assetid; Invalid table \", " +
                                              "\"status_message\": \"Unable to resolve" +
                                              " target record, coalesce values not present: u_assetid\" }] }", Results.class);

        System.out.println(results.getResult().get(0).getStatus());
        System.out.println(results.getResult().get(0).getErrorMessage());
    }
}

class Results {
    @SerializedName("import_set")
    private String importSet;
    @SerializedName("staging_table")
    private String stagingTable;
    @SerializedName("result")
    private List<Result> result;

    public String getImportSet() {
        return importSet;
    }

    public void setImportSet(String importSet) {
        this.importSet = importSet;
    }

    public String getStagingTable() {
        return stagingTable;
    }

    public void setStagingTable(String stagingTable) {
        this.stagingTable = stagingTable;
    }

    public List<Result> getResult() {
        return result;
    }

    public void setResult(List<Result> result) {
        this.result = result;
    }
}

class Result {
    @SerializedName("transform_map")
    private String transformMap;
    @SerializedName("status")
    private String status;
    @SerializedName("error_message")
    private String errorMessage;
    @SerializedName("status_message")
    private String statusMessage;

    public String getTransformMap() {
        return transformMap;
    }

    public void setTransformMap(String transformMap) {
        this.transformMap = transformMap;
    }

    public String getStatus() {
        return status;
    }

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

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }
}

Jackson

public class Demo {
    public static void main(String[] args) throws IOException {
        final ObjectMapper mapper = new ObjectMapper();
        final Results results = mapper.readValue("{ \"import_set\": \"ISET0010118\", \"staging_table\": \"u_ee_imp_set_asset_nmi\", " +
                                                 "\"result\": [{ " +
                                                 "\"transform_map\": \"EE Trsfrm Map Asset NMI \", \"status\": \"error\", " +
                                                 "\"error_message\": \"Unable to resolve " +
                                                 "target record, coalesce values not present: u_assetid; Invalid table \", " +
                                                 "\"status_message\": \"Unable to resolve" +
                                                 " target record, coalesce values not present: u_assetid\" }] }", Results.class);

        System.out.println(results.getResult().get(0).getStatus());
        System.out.println(results.getResult().get(0).getErrorMessage());
    }
}

class Results {
    @JsonProperty("import_set")
    private String importSet;
    @JsonProperty("staging_table")
    private String stagingTable;
    @JsonProperty("result")
    private List<Result> result;

    public String getImportSet() {
        return importSet;
    }

    public void setImportSet(String importSet) {
        this.importSet = importSet;
    }

    public String getStagingTable() {
        return stagingTable;
    }

    public void setStagingTable(String stagingTable) {
        this.stagingTable = stagingTable;
    }

    public List<Result> getResult() {
        return result;
    }

    public void setResult(List<Result> result) {
        this.result = result;
    }
}

class Result {
    @JsonProperty("transform_map")
    private String transformMap;
    @JsonProperty("status")
    private String status;
    @JsonProperty("error_message")
    private String errorMessage;
    @JsonProperty("status_message")
    private String statusMessage;

    public String getTransformMap() {
        return transformMap;
    }

    public void setTransformMap(String transformMap) {
        this.transformMap = transformMap;
    }

    public String getStatus() {
        return status;
    }

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

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public String getStatusMessage() {
        return statusMessage;
    }

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }
}

As you see, Gson and Jackson are pretty similar and differs mostly in annotation and method names, but the principles are the same.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM