Java解析並修改JSON:將isShow屬性改為false

木头左發表於2024-07-05

哈嘍,大家好,我是木頭左!

在Java中,可以使用各種庫來處理JSON資料。其中,Jackson和Gson是兩個非常流行且功能強大的庫。在這篇文章中,將使用Jackson庫來解析給定的JSON字串,將其轉換為Map物件,然後修改其中的"isShow"屬性,最後再將其轉回JSON字串。

準備工作:新增Jackson依賴

需要在專案中新增Jackson庫的依賴。如果你使用的是Maven專案,可以在pom.xml檔案中新增以下依賴:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>
</dependencies>

解析JSON為Map

接下來,使用Jackson庫將給定的JSON字串解析為Map物件。需要建立一個ObjectMapper物件,然後呼叫其readValue方法進行解析。

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Map;

public class JsonToMap {
    public static void main(String[] args) {
        String json = "{\"tableConfig\": {"toolbar\": {\"batchOperation\": null,\"showRightWidgetSlot\": false,\"displayType\": \"both\",\"operationButtons\": [{"name\": \"匯出\",\"icon\": \"h-icon-export\",\"code\": \"export\",\"value\": \"548a94d7-1024-11ef-ab38-b17b4743f06f\",\"isInner\": true,\"btnType\": \"button\",\"operation\": {\"clickType\": \"custom\",\"pageJump\": null,\"interfaceUrl\": null,\"dialog\": null,\"clickCode\": null,\"secondDialogContent\": null,\"paramFields\": null},\"mainButton\": false,\"position\": \"left\",\"editAbled\": false,\"isShow\": true,\"configIsShow\": true}]}}";
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Map<String, Object> map = objectMapper.readValue(json, Map.class);
            System.out.println("原始Map: " + map);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

執行上述程式碼,可以看到原始的JSON字串已經被成功解析為Map物件。

修改isShow屬性

現在已經得到了一個包含JSON資料的Map物件,接下來需要找到"isShow"屬性並將其值修改為false。為了實現這個目標,可以遍歷Map物件的鍵值對,找到對應的屬性並進行修改。

public static void updateIsShowProperty(Map<String, Object> map) {
    if (map == null || map.isEmpty()) {
        return;
    }
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        if (entry.getKey().equals("isShow")) {
            entry.setValue(false);
        } else if (entry.getValue() instanceof Map) {
            updateIsShowProperty((Map<String, Object>) entry.getValue());
        } else if (entry.getValue() instanceof List) {
            updateListIsShowProperty(entry.getValue());
        }
    }
}

public static void updateListIsShowProperty(Object list) {
    if (list instanceof List) {
        List<?> dataList = (List<?>) list;
        for (Object item : dataList) {
            if (item instanceof Map) {
                updateIsShowProperty((Map<String, Object>) item);
            }
        }
    }
}

updateIsShowProperty方法中,遞迴地遍歷了Map物件的所有鍵值對。當遇到"isShow"屬性時,將其值修改為false;當遇到巢狀的Map或List物件時,遞迴地進行相同的操作。

將修改後的Map轉回JSON字串

需要將修改後的Map物件轉換回JSON字串。這可以透過ObjectMapper物件的writeValueAsString方法實現。

public static String mapToJson(Map<String, Object> map) {
    ObjectMapper objectMapper = new ObjectMapper();
    try {
        return objectMapper.writeValueAsString(map);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

現在,可以將這些方法組合起來,完成整個任務。

public static void main(String[] args) {
    // ... 前面的程式碼不變 ...
    // 更新isShow屬性
    updateIsShowProperty(map);
    System.out.println("更新後的Map: " + map);
    // 將修改後的Map轉回JSON字串
    String updatedJson = mapToJson(map);
    System.out.println("更新後的JSON字串: " + updatedJson);
}

執行上述程式碼,可以看到原始的JSON字串已經被成功解析為Map物件,並且其中的"isShow"屬性已經被修改為false。將修改後的Map物件轉換回JSON字串。

總結

在這篇文章中,使用Jackson庫完成了以下任務:

  • 將給定的JSON字串解析為Map物件。
  • 修改Map物件中的"isShow"屬性為false。
  • 將修改後的Map物件轉換回JSON字串。
    透過這個例子,可以看到Java處理JSON資料的能力是非常強大和靈活的。希望這篇文章能幫助你更好地理解和使用Java處理JSON資料。

我是木頭左,感謝各位童鞋的點贊、收藏,我們下期更精彩!

相關文章