From 462e9bc4a9f6eb2a9e635ac19fdb47b07b5e467c Mon Sep 17 00:00:00 2001 From: rememberber Date: Sun, 8 Dec 2024 10:07:20 +0800 Subject: [PATCH] =?UTF-8?q?json=E5=B7=A5=E5=85=B7=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=94=AF=E6=8C=81key=20value=E4=BA=92=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 10 ++--- .../ui/listener/func/JsonBeautyListener.java | 43 +------------------ .../moo/tool/util/JsonKeyValueSwapper.java | 38 ++++++++++++++++ 3 files changed, 45 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/luoboduner/moo/tool/util/JsonKeyValueSwapper.java diff --git a/pom.xml b/pom.xml index 5ac371f6..f1b3c8b6 100644 --- a/pom.xml +++ b/pom.xml @@ -378,11 +378,11 @@ - - - - - + + com.fasterxml.jackson.core + jackson-databind + ${jackson-databind.version} + diff --git a/src/main/java/com/luoboduner/moo/tool/ui/listener/func/JsonBeautyListener.java b/src/main/java/com/luoboduner/moo/tool/ui/listener/func/JsonBeautyListener.java index a247009a..34bc7e9e 100644 --- a/src/main/java/com/luoboduner/moo/tool/ui/listener/func/JsonBeautyListener.java +++ b/src/main/java/com/luoboduner/moo/tool/ui/listener/func/JsonBeautyListener.java @@ -12,10 +12,7 @@ import com.luoboduner.moo.tool.ui.component.FindReplaceBar; import com.luoboduner.moo.tool.ui.dialog.JsonResultDialog; import com.luoboduner.moo.tool.ui.form.MainWindow; import com.luoboduner.moo.tool.ui.form.func.JsonBeautyForm; -import com.luoboduner.moo.tool.util.MockDataGenerator; -import com.luoboduner.moo.tool.util.MybatisUtil; -import com.luoboduner.moo.tool.util.SqliteUtil; -import com.luoboduner.moo.tool.util.XmlReformatUtil; +import com.luoboduner.moo.tool.util.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; @@ -551,7 +548,7 @@ public class JsonBeautyListener { try { String jsonText = jsonBeautyForm.getTextArea().getText(); - jsonBeautyForm.getTextArea().setText(swapKeyValue(jsonText)); + jsonBeautyForm.getTextArea().setText(JsonKeyValueSwapper.swapKeysAndValues(jsonText)); jsonBeautyForm.getTextArea().setCaretPosition(0); } catch (Exception e1) { JOptionPane.showMessageDialog(App.mainFrame, "转换失败!\n\n" + e1.getMessage(), "失败", @@ -701,40 +698,4 @@ public class JsonBeautyListener { return "未命名_" + DateFormatUtils.format(new Date(), "yyyy-MM-dd_HH-mm-ss"); } - /** - * 自己实现的json Key Value互换,原理是转成map,然后互换key和value,以及递归 - * @param jsonText - * @return - */ - private static String swapKeyValue(String jsonText) { - if (StringUtils.isBlank(jsonText)) { - return jsonText; - } - if (jsonText.startsWith("{") && jsonText.endsWith("}")) { - jsonText = jsonText.substring(1, jsonText.length() - 1); - } - String[] split = jsonText.split(","); - StringBuilder result = new StringBuilder(); - for (String s : split) { - String[] keyValue = s.split(":"); - if (keyValue.length == 2) { - String key = keyValue[0]; - String value = keyValue[1]; - if (key.startsWith("\"")) { - key = key.substring(1); - } - if (key.endsWith("\"")) { - key = key.substring(0, key.length() - 1); - } - if (value.startsWith("\"")) { - value = value.substring(1); - } - if (value.endsWith("\"")) { - value = value.substring(0, value.length() - 1); - } - result.append(value).append(":").append(key).append(","); - } - } - return "{" + result.substring(0, result.length() - 1) + "}"; - } } diff --git a/src/main/java/com/luoboduner/moo/tool/util/JsonKeyValueSwapper.java b/src/main/java/com/luoboduner/moo/tool/util/JsonKeyValueSwapper.java new file mode 100644 index 00000000..aa19bc19 --- /dev/null +++ b/src/main/java/com/luoboduner/moo/tool/util/JsonKeyValueSwapper.java @@ -0,0 +1,38 @@ +package com.luoboduner.moo.tool.util; + +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; + +import java.util.Iterator; +import java.util.Map; + +public class JsonKeyValueSwapper { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static String swapKeysAndValues(String jsonString) throws JsonProcessingException { + JsonNode rootNode = objectMapper.readTree(jsonString); + ObjectNode swappedNode = objectMapper.createObjectNode(); + swapKeysAndValues(rootNode, swappedNode); + return objectMapper.writeValueAsString(swappedNode); + } + + private static void swapKeysAndValues(JsonNode originalNode, ObjectNode swappedNode) { + Iterator> fields = originalNode.fields(); + while (fields.hasNext()) { + Map.Entry field = fields.next(); + String key = field.getKey(); + JsonNode value = field.getValue(); + if (value.isObject()) { + ObjectNode nestedSwappedNode = objectMapper.createObjectNode(); + swapKeysAndValues(value, nestedSwappedNode); + swappedNode.set(value.asText(), nestedSwappedNode); + } else { + swappedNode.put(value.asText(), key); + } + } + } + +} \ No newline at end of file