我有一個JSON文件,其中有幾個包含重複值的文本數組。例如:使用Jackson從所有JSON數組中刪除重複的文本值
{
"mName": "Carl Sanchez",
"mEmailID": "[email protected]",
"mPhoneNo": 7954041324,
"tutorTypes": [
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Coaching Institute Teacher ",
" Corporate Professional ",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor",
" Freelancer/Professional Tutor"
],
"disciplines": [
" Japanese",
" German ",
" Japanese",
" German ",
" Japanese",
" Hindi ",
" Japanese",
" French "
]
}
我想刪除JSON源中所有數組的重複值(文本值)。在上面的例子中,這將是從數組中刪除重複的語言和輔導類型。所需的輸出將是上述JSON源,只需在適用的情況下刪除重複值。此外,我不希望將代碼綁定到特定的JSON字段名稱,而是通常的任何文本值數組。在上面的例子中所需的輸出將是,
{
"mName": "Carl Sanchez",
"mEmailID": "[email protected]",
"mPhoneNo": 7954041324,
"tutorTypes": [
" Freelancer/Professional Tutor",
" Coaching Institute Teacher ",
" Corporate Professional "
],
"disciplines": [
" Japanese",
" German ",
" Hindi ",
" French "
]
}
JSON的輸入源是一個文件,我想要寫在文件中的輸出。 我試圖程序來完成這項傑克遜使用數據綁定API:
public static void removeDuplicateStringElementsFromAllArrays(String file) throws IOException {
Writer fileWriter = new BufferedWriter(new FileWriter(new File("out.json")));
JsonFactory f = new MappingJsonFactory();
JsonParser jp = f.createJsonParser(new File(file));
parse(jp, fileWriter);
}
private static void parse(JsonParser jp, Writer writer) throws IOException{
JsonToken current;
current = jp.nextToken();
if(current != null){
System.out.println(current.asString());
writer.write(current.asString());
}
if(current == JsonToken.START_ARRAY){
if(jp.nextTextValue() != null){
JsonNode node = jp.readValueAsTree();
// Trim the String values
String[] values = ArraysUtil.trimArray("\"" , node.toString().split(","), "\"");
// Ensure that there is no duplicate value
values = new HashSet<String>(Arrays.asList(values)).toArray(new String[0]);
// Finally, concatenate the values back and stash them to file
String concatValue = String.join(",", values);
// Write the concatenated values to file
writer.write(concatValue);
}
else{
parse(jp, writer);
}
}
else{
// Move on directly
parse(jp, writer);
}
}
我得到幾個空值作爲輸出。我知道爲什麼會發生這種情況。我想,當我打電話給jp.nextTextValue()
時,解析器已經開始工作,構建一個值樹可能導致了這種情況,但我無法找出任何解決方法。有誰知道,我怎麼去完成這項任務。
編輯:
只是想在這裏補充說明一兩件事 - 我使用的是傑克遜,數據綁定API,因爲它是建立在流API解析一個大的JSON源,這是我的情況時,這是有效的。所以,考慮到這一點的解決方案將不勝感激。