亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java簡單json不替換屬性的值

Java簡單json不替換屬性的值

守著星空守著你 2023-08-16 18:19:08
正如上面的標題所述,我試圖將“?name?”的值替換為“?abc?”,但這似乎并沒有覆蓋它,因為使用簡單 Json?java 代碼替換它后它是相同的值。這是我的java代碼:? String jsonString =?? ? "{"? ? ? ? + "\"data\":"? ? ? ? + "["? ? ? ? ? ? + "{"? ? ? ? ? ? ? ? + "\"jazz\":\"black\","? ? ? ? ? ? ? ? + "\"name\":\"white\","? ? ? ? ? ? ? ? + "\"given\":\"red\","? ? ? ? ? ? ? ? + "\"sam\":\"blue\","? ? ? ? ? ? ? ? + "\"mail\":\"yellow\","? ? ? ? ? ? ? ? + "\"member\":\"green\","? ? ? ? ? ? ? ? + "\"department\":\"green\","? ? ? ? ? ? ? ? + "\"title\":\"green\""? ? ? ? ? ? + "}"? ? ? ? + "]"? ? + "}";? ? JSONParser parser = new JSONParser();? ? JSONObject jsonObj = (JSONObject) parser.parse(jsonString);? ? JSONObject newJSON = new JSONObject();? ? jsonObj.remove("name");? ? jsonObj.put("name", "abc");正如我所說,上面的代碼似乎沒有對json 結構中已有的“ name ”屬性執行任何操作。上面的輸出看起來像這樣:{? ? "data": [? ? ? ? {? ? ? ? ? ? "given": "red",? ? ? ? ? ? "mail": "yellow",? ? ? ? ? ? "jazz": "black",? ? ? ? ? ? "name": "white",? ? ? ? ? ? "member": "green",? ? ? ? ? ? "department": "green",? ? ? ? ? ? "title": "green",? ? ? ? ? ? "sam": "blue"? ? ? ? }? ? ],? ? "name": "abc"}輸出應該是什么樣子:{? ? "data": [? ? ? ? {? ? ? ? ? ? "given": "red",? ? ? ? ? ? "mail": "yellow",? ? ? ? ? ? "jazz": "black",? ? ? ? ? ? "name": "abc",? ? ? ? ? ? "member": "green",? ? ? ? ? ? "department": "green",? ? ? ? ? ? "title": "green",? ? ? ? ? ? "sam": "blue"? ? ? ? }? ? ]}知道為什么它不改變它嗎?
查看完整描述

3 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

這對我有用:

JSONArray jsonArray = (JSONArray)jsonObj.get("data");
    JSONObject jsonObject = ((JSONObject)(jsonArray).get(0));
    jsonObject.put("name", "abc");
    System.out.println(jsonObj.toJSONString());


查看完整回答
反對 回復 2023-08-16
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

您的對象內部有 json 對象您需要獲取內部數據對象并修改它 jsonObj.get("data").put("name", "abc")



查看完整回答
反對 回復 2023-08-16
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

有時您可能會遇到以靈活的方式完美替換某些值的情況。所以我想展示這個使用json-path依賴項的附加方法。


指定路徑集合來替換真實數據,例如:


import static com.google.common.collect.Lists.newArrayList;


...


    private static final List<String> PATHS_TO_REPLACE = newArrayList(

            "$.email",

            "$.colleagues.[*].email",

            "$.other.required.pathmask"

    );

最重要的代碼部分:


    public String maskSensitiveData(String asJson) {

        DocumentContext parsed = JsonPath.parse(asJson);

        PATHS_TO_REPLACE.forEach(path -> parsed.set(path, "***starred***"));

        return parsed.jsonString();

    }

為了避免com.jayway.jsonpath.PathNotFoundException如果您確定必須抑制它們,您可以使用特殊配置:


    private static final Configuration CONFIGURATION = Configuration

            .builder()

            .options(Option.SUPPRESS_EXCEPTIONS)

            .build();

并parsed應以更新的方式提供文件:


    DocumentContext parsed = JsonPath.using(CONFIGURATION).parse(asJson);

要使用代碼,我建議嘗試為相應的服務準備測試。


聚苯乙烯

如果您想以動態方式計算星星以設置值(或僅隱藏部分數據),也可以處理。為了使數據數組保持簡單,請注意map同一對象的方法。相應的示例也添加到服務中:


    public String flexibleMaskingSensitiveData(String asJson) {

        DocumentContext parsed = JsonPath.using(CONFIGURATION).parse(asJson);

        PATHS_TO_REPLACE.forEach(path -> parsed.map(path,

                (currentValue, conf) -> starringCurrentValue(currentValue)));

        return parsed.jsonString();

    }


    private Object starringCurrentValue(Object currentValue) {

        return ofNullable(currentValue)

                .filter(String.class::isInstance)

                .map(String.class::cast)

                .map(String::length)

                .map(times -> StringUtils.repeat('*', times))

                .orElse("");

    }


查看完整回答
反對 回復 2023-08-16
  • 3 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號