Как преобразовать строку в JSON / карты - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу преобразовать нижнюю строку в json или карты для чтения отдельных сообщений, поэтому как мне этого добиться.

 {
  "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"
    }
  ]
}

Здесь я хочу прочитать status, error_message и т. Д.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Существует множество библиотек, позволяющих анализировать JSON.Вероятно, наиболее популярными являются Гсон и Джексон .Вот примеры парсинга строки в узел JSON с ними.

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());
}

Джексон

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());
}

В обоих примерах будет напечатано:

{"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 

Или вы можете создать POJO для размещения ваших данных и анализа строки прямо в объектах:

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;
    }
}

Джексон

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;
    }
}

Как видите, Гсон и Джексон очень похожи и отличаются в основном аннотациями и именами методов, но принципы одинаковы.

0 голосов
/ 09 декабря 2018

Вы можете использовать ObjectMapper или Gson.Код ObjectMapper для разбора строки на карту:

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

Код Gson:

Gson gson = new Gson();
Map<String, Object> myMap = gson.fromJson("jsonString", 
  new TypeReference<Map<String, Object>>() {}.getType());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...