Существует множество библиотек, позволяющих анализировать 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;
}
}
Как видите, Гсон и Джексон очень похожи и отличаются в основном аннотациями и именами методов, но принципы одинаковы.