jackson替换对应key值

private static final ObjectMapper MAPPER = new ObjectMapper();
public static JsonNode stringToJsonNode(String jsonString) {
    if (StringUtils.isBlank(jsonString)) {
        return null;
    }
    try {
        return MAPPER.readTree(jsonString);
    } catch (Exception e) {
        LOGGER.error("json convert exception", e);
    }

    return null;
}
public static JsonNode getJsonNode(JsonNode jsonNode, String key) {
    if (jsonNode == null) {
        return null;
    }
    if (jsonNode.hasNonNull(key)) {
        return jsonNode.get(key);
    }
    return null;
}
public static void setJsonNodeValue(JsonNode node, String attrs, JsonNode data) {
    int index = attrs.indexOf('.');
    if (index == -1) {
        ObjectNode node1 = (ObjectNode) node;
        node1.set(attrs, data);
    } else {
        String s1 = attrs.substring(0, index);
        String s2 = attrs.substring(index + 1);
        setJsonNodeValue(getJsonNode(node, s1), s2, data);
    }
}
public static String replaceJsonVal(String key, String newVal, String json){
    JsonNode jsonNode = JsonUtil.stringToJsonNode(json);
    JsonNode newNode = new TextNode(newVal);
    JsonNode parent = jsonNode.findParent(key);
    JsonUtil.setJsonNodeValue(parent, key, newNode);
    return jsonNode.toString();
}

public static void main(String[] args) throws JsonProcessingException {


        String json = "{\"name\": \"张三\", \"phone\": \"13120928116\", \"driver\": \"\", \"gender\": \"1\", \"bankCity\": \"上海\", \"bankCardNo\": \"1\"}";


        String str = replaceJsonVal("bankCardNo", "112233", json);
        System.out.println(str);


    }

### 回答1: 您可以使用MySQL中的JSON_CONTAINS函数来检查多个JSON对象是否具有完全相同的键对。 假设您的表格结构如下: ``` CREATE TABLE my_table ( id INT PRIMARY KEY, json_column JSON ); ``` 并且您有三个JSON对象需要检查,存储在变量json1,json2和json3中。您可以使用以下查询来检查这些JSON对象是否完全相同: ``` SELECT COUNT(DISTINCT json_column) = 1 AS all_json_columns_match FROM my_table WHERE JSON_CONTAINS(json_column, ?, '$') AND JSON_CONTAINS(json_column, ?, '$') AND JSON_CONTAINS(json_column, ?, '$'); ``` 在上面的查询中,`JSON_CONTAINS(json_column, ?, '$')` 检查 JSON 列是否包含给定的 JSON 对象。问号表示需要替换的参数,因此您需要将 json1,json2和json3 依次传递作为参数。`COUNT(DISTINCT json_column) = 1` 检查所有匹配行中的不同 JSON 列是否只有一个,如果是,则说明所有 JSON 对象都完全相同。 请注意,在使用 JSON_CONTAINS 函数时,第三个参数 '$' 表示从根元素开始搜索 JSON,如果您的JSON对象在根元素下,则将其替换为实际的JSON路径。 ### 回答2: 校验多个List对应游标Json列是否完全一样,可以通过以下步骤进行: 1. 首先,将MySQL中的Json列解析为List对象。可以使用MySQL提供的JSON函数,如JSON_EXTRACT来实现。将每个Json列解析为对应的List对象。 2. 然后,逐一比较每个List对象是否完全一致。可以使用Java或其他编程语言中的比较方法,如equals()方法来判断两个List是否相等。 3. 如果所有的List对象都完全一致,则表示多个List对应游标Json列完全一样。 以下是一个示例代码,使用Java来实现上述步骤: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.JsonNode; import java.util.List; import java.util.ArrayList; import java.util.Arrays; public class JsonListValidator { public static void main(String[] args) { String json1 = "[1, 2, 3, 4]"; String json2 = "[1, 2, 3, 4]"; String json3 = "[1, 2, 3, 5]"; List<Integer> list1 = parseJsonToList(json1); List<Integer> list2 = parseJsonToList(json2); List<Integer> list3 = parseJsonToList(json3); List<List<Integer>> lists = new ArrayList<>(); lists.add(list1); lists.add(list2); lists.add(list3); boolean result = validateLists(lists); System.out.println("Lists are " + (result ? "equal" : "not equal")); } private static List<Integer> parseJsonToList(String json) { try { ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(json); List<Integer> list = objectMapper.convertValue(jsonNode, ArrayList.class); return list; } catch (Exception ex) { ex.printStackTrace(); return null; } } private static boolean validateLists(List<List<Integer>> lists) { for (int i = 1; i < lists.size(); i++) { if (!lists.get(0).equals(lists.get(i))) { return false; } } return true; } } ``` 以上代码将Json列分别解析为List对象,然后将List对象存储到一个包含所有List的列表中。最后,通过逐一比较列表中的List对象是否相等来判断多个List对应游标Json列是否完全一样。 ### 回答3: 要校验多个List对应游标的Json列是否完全一样,可以通过以下步骤进行: 1. 首先,将每个List中的元素转换为Json格式,并将其保存在MySQL数据库中的游标Json列中。 2. 使用MySQL的JSON函数,如JSON_COMPARE(),将需要比较的Json列进行比较。JSON_COMPARE()函数可以比较两个Json对象是否完全相同。 3. 编写一个存储过程或触发器,用于执行Json列的比较操作。在存储过程或触发器中,通过查询所有需要比较的游标Json列,使用JSON_COMPARE()函数进行比较。 4. 如果Json列完全相同,即返回结果为0,则说明多个List对应游标的Json列完全一样。 以下是一个示例的存储过程,用于校验多个List对应游标的Json列是否完全一样: DELIMITER // CREATE PROCEDURE compare_lists() BEGIN DECLARE json1, json2 JSON; DECLARE is_same INT DEFAULT 0; -- 查询需要比较的Json列,并逐个比较 DECLARE cursor1 CURSOR FOR SELECT json_column FROM table1; DECLARE cursor2 CURSOR FOR SELECT json_column FROM table2; OPEN cursor1; OPEN cursor2; read_loop: LOOP FETCH cursor1 INTO json1; FETCH cursor2 INTO json2; SET is_same = JSON_COMPARE(json1, json2); -- 如果不相同,则退出循环 IF is_same <> 0 THEN LEAVE read_loop; END IF; -- 如果没有更多数据,则退出循环 IF (is_same = 0) AND (json1 IS NULL AND json2 IS NULL) THEN LEAVE read_loop; END IF; END LOOP; CLOSE cursor1; CLOSE cursor2; -- 输出比较结果 IF is_same = 0 THEN SELECT 'Json列完全一样'; ELSE SELECT 'Json列不完全一样'; END IF; END // DELIMITER ; 通过执行上述存储过程,可以校验多个List对应游标的Json列是否完全一样。如果输出结果为"Json列完全一样",则表示多个List对应游标的Json列完全一样;如果输出结果为"Json列不完全一样",则表示多个List对应游标的Json列不完全一样。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值