У меня есть требование, при котором мне нужно сопоставить входной файл JSON с определенной выходной схемой JSON, но я не знаю, как с этим поступить. Должен ли я продолжить преобразование из JSON в объект Java, преобразовать и преобразовать обратно в JSON или есть какой-либо другой способ справиться с этим?
Мой входной и выходной JSON выглядит как в примерах ниже.
Вход:
[{
"FirstName": "fgfgf",
"BIRTH_DATE": "1988-06-25",
"frm": "sdsd67ds-4937-fdf",
"GENDER_CODE": "M",
"ID": "4083-9b78-eab99231adc9",
"LastName": "ddgd"
}, {
"FirstName": "gfgf",
"BIRTH_DATE": "1973-03-02",
"frm": "7e3b3dd6-97bc-d918065a642f",
"GENDER_CODE": "O",
"ID": "88e9-0253a00cde91",
"LastName": "gfgsfg"
}, {
"FirstName": " dfsdfsdfgsd",
"BIRTH_DATE": "1950-02-26",
"frm": "9d30-9f23ed77ea1a",
"GENDER_CODE": "M",
"ID": "9b1b-090c179a31ea",
"LastName": "RU dddas"
}, {
"cStage df": "cStage df",
"dds": "cM1y",
"ddsc": "cTgb",
"grgfd": "cK1",
"BId": "a431a5b4-4176-704bed5021f8",
"fsfsdfsd": "7face4c8-ffa870cfbf2d"
}, {
"fvf": "cStage dgd",
"dsdf": "cMff",
"fgsd": "cTgf",
"FirstName": "dfdfsdsf",
"dfs": "c1",
"BId": "a43-9d6d-704bed5021f8",
"BIRTH_DATE": "1999-08-30",
"msdrsdn": "727146-8e930fc1f662",
"GENDER_CODE": "F",
"ID": "6560a6cb-e01757819bcc",
"LastName": "dfsdfsd"
}]
Выход:
[{
"SENDER_NAME": "XYZ",
"MARITAL_STATUS": "Unmarried",
"GENDER_CODE": "F",
"PHONE_NO": "576756754",
"LAST_NAME": "ghghg",
"FIRST_NAME": "hgdghd",
"PHONE_CODE": "91",
"GENDER": "F",
"ID": "5765474",
"ADDRESS": "500 fgdfgd,gdf",
"BIRTH_DATE": 1523877361463,
"gdfgg": "-86afad953b34",
"DATE_TIME": 56546456,
"A_BIRTH_DATE": "567546456",
"C_INFO": {
"CLINICAL": {
"T": "1",
"N": "0",
"M": "1",
"STAGE": "Stage I"
},
"PATHOLOGY": {
"T": "1",
"N": "1",
"M": "1",
"STAGE": "Stage I"
}
}
},
{
"SENDER_NAME": "ABC",
"MARITAL_STATUS": "Unmarried",
"GENDER_CODE": "M",
"PHONE_NO": "56456456",
"LAST_NAME": "hghfg",
"FIRST_NAME": "dgdfgd",
"PHONE_CODE": "91",
"GENDER_CODE": "M",
"ID": "6456456456",
"FULL_ADDRESS": "fgdfdfghdf,fdgfdg,fgfd45345",
"BIRTH_DATE": 1523877413779,
"ID": "b84e-4866a656cce8",
"DATE_TIME": 1523877413779,
"BIRTH_DATE": "67567657",
"C_INFO": {
"CLINICAL": {
"T": "0",
"N": "0",
"M": "0",
"STAGE": "Stage 0"
},
"PATHOLOGY": {
"T": "0",
"N": "0",
"M": "0",
"STAGE": "Stage 0"
}
}
},
{
"SENDER_NAME": "RAC",
"MARITAL_STATUS": "Unmarried",
"GENDER_CODE": "F",
"PHONE_NO": "56546546",
"LAST_NAME": "hfghf",
"FIRST_NAME": "gfhfghfg",
"PHONE_CODE": "91",
"GENDER_CODE": "M",
"ID": "676745674",
"_ADDRESS": "fgdfdfg",
"BIRTH_DATE": 6756756756,
"ID": "2e-a0d8-hghfg67ggh",
"DATE_TIME": "Mon March 20 17:52:04 IST 2018",
"BIRTH_DATE": "05212014",
"C_INFO": {
"CLINICAL": {
"T": "0",
"N": "0",
"M": "1",
"STAGE": "Stage IA"
},
"PATHOLOGY": {
"T": "1",
"N": "0",
"M": "1",
"STAGE": "Stage IB"
}
}
}
]
И вы можете перейти от Json -> Java -> Json, используя конвертер Json для автоматического сопоставления свойств. Однако это может быть менее производительно, чем написание преобразователя Json -> Json, в котором вы просто сопоставляете свойства из одной схемы в другую.
Спасибо. В моем выходном JSON необходимо добавить дополнительные поля (например, C_INFO ": {" CLINICAL ": {...), которые могут присутствовать или не присутствовать во входном JSON. Если их нет во входных данных, то в выходных json дополнительных к полям необходимо добавить значение null. Не знаю, как можно реализовать эту логику в этом случае.




Встряхнуть. Это позволит вам выполнять преобразования без POJO, если форматы не сильно отличаются.
Вы можете использовать API Джексона для добавления поля или преобразования JSON без создания POJO. Он предоставляет объектную форму, называемую типами JsonNode, JsonObject и JsonArray, которые можно преобразовать, как я сделал в приведенном ниже коде. Я надеюсь, это поможет вам.
import java.io.IOException;
import java.util.Iterator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JsonTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws JsonProcessingException, IOException {
String jsoninpt = "[{\r\n" +
" \"FirstName\": \"fgfgf\",\r\n" +
" \"BIRTH_DATE\": \"1988-06-25\",\r\n" +
" \"frm\": \"sdsd67ds-4937-fdf\",\r\n" +
" \"GENDER_CODE\": \"M\",\r\n" +
" \"ID\": \"4083-9b78-eab99231adc9\",\r\n" +
" \"LastName\": \"ddgd\"\r\n" +
"}, {\r\n" +
" \"FirstName\": \"gfgf\",\r\n" +
" \"BIRTH_DATE\": \"1973-03-02\",\r\n" +
" \"frm\": \"7e3b3dd6-97bc-d918065a642f\",\r\n" +
" \"GENDER_CODE\": \"O\",\r\n" +
" \"ID\": \"88e9-0253a00cde91\",\r\n" +
" \"LastName\": \"gfgsfg\"\r\n" +
"}, {\r\n" +
" \"FirstName\": \" dfsdfsdfgsd\",\r\n" +
" \"BIRTH_DATE\": \"1950-02-26\",\r\n" +
" \"frm\": \"9d30-9f23ed77ea1a\",\r\n" +
" \"GENDER_CODE\": \"M\",\r\n" +
" \"ID\": \"9b1b-090c179a31ea\",\r\n" +
" \"LastName\": \"RU dddas\"\r\n" +
"}, {\r\n" +
" \"cStage df\": \"cStage df\",\r\n" +
" \"dds\": \"cM1y\",\r\n" +
" \"ddsc\": \"cTgb\",\r\n" +
" \"grgfd\": \"cK1\",\r\n" +
" \"BId\": \"a431a5b4-4176-704bed5021f8\",\r\n" +
" \"fsfsdfsd\": \"7face4c8-ffa870cfbf2d\"\r\n" +
"}, {\r\n" +
" \"fvf\": \"cStage dgd\",\r\n" +
" \"dsdf\": \"cMff\",\r\n" +
" \"fgsd\": \"cTgf\",\r\n" +
" \"FirstName\": \"dfdfsdsf\",\r\n" +
" \"dfs\": \"c1\",\r\n" +
" \"BId\": \"a43-9d6d-704bed5021f8\",\r\n" +
" \"BIRTH_DATE\": \"1999-08-30\",\r\n" +
" \"msdrsdn\": \"727146-8e930fc1f662\",\r\n" +
" \"GENDER_CODE\": \"F\",\r\n" +
" \"ID\": \"6560a6cb-e01757819bcc\",\r\n" +
" \"LastName\": \"dfsdfsd\"\r\n" +
"}]";
String field = "{\r\n" +
" \"CLINICAL\": {\r\n" +
" \"T\": \"1\",\r\n" +
" \"N\": \"0\",\r\n" +
" \"M\": \"1\",\r\n" +
" \"STAGE\": \"Stage I\"\r\n" +
" },\r\n" +
" \"PATHOLOGY\": {\r\n" +
" \"T\": \"1\",\r\n" +
" \"N\": \"1\",\r\n" +
" \"M\": \"1\",\r\n" +
" \"STAGE\": \"Stage I\"\r\n" +
" }\r\n" +
" }";
//create JSON Node object from JSON String using ObjectMapper
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonFieldNode = mapper.readTree(field);
JsonNode jsonInputNode = mapper.readTree(jsoninpt);
System.out.println(mapper.writeValueAsString(jsonInputNode));
//Iterate through the JsonNode elements inside the JSON Array
Iterator<JsonNode> jsonInputNodeElements = jsonInputNode.elements();
while(jsonInputNodeElements.hasNext()) {
ObjectNode element = (ObjectNode) jsonInputNodeElements.next();
//Add element to the JSON Object.
element.put("c_info", mapper.writeValueAsString(jsonFieldNode));
}
System.out.println(mapper.writeValueAsString(jsonInputNode));
}
}
Json - это формат, я думаю, вы имеете в виду «Как преобразовать одну схему Json в другую» - просто чтобы прояснить ваше намерение.