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

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

如何為 Json 對象使用動態屬性名稱

如何為 Json 對象使用動態屬性名稱

慕容708150 2022-10-07 17:37:56
我們如何使 JSON 屬性名稱動態化。例如public class Value {    @JsonProperty(value = "value")    private String val;    public void setVal(String val) {        this.val = val;    }    public String getVal() {        return val;    }}序列化此對象時,它被保存為,{"value": "actual_value_saved"}但我想讓密鑰也像{"new_key": "actual_value_saved"}. 任何幫助深表感謝。
查看完整描述

3 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

您可以使用JsonAnySetter JsonAnyGetter注釋。后面可以使用Map實例。如果您總是one-key-object可以Collections.singletonMap在其他情況下使用HashMap或其他實現中使用。下面的示例顯示了您可以輕松地使用這種方法并根據key需要創建任意數量的隨機 -s:


import com.fasterxml.jackson.annotation.JsonAnyGetter;

import com.fasterxml.jackson.annotation.JsonAnySetter;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Collections;

import java.util.Map;

import java.util.Objects;


public class JsonApp {


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

        DynamicJsonsFactory factory = new DynamicJsonsFactory();

        ObjectMapper mapper = new ObjectMapper();


        System.out.println(mapper.writeValueAsString(factory.createUser("Vika")));

        System.out.println(mapper.writeValueAsString(factory.createPhone("123-456-78-9")));

        System.out.println(mapper.writeValueAsString(factory.any("val", "VAL!")));

    }

}


class Value {


    private Map<String, String> values;


    @JsonAnySetter

    public void put(String key, String value) {

        values = Collections.singletonMap(key, value);

    }


    @JsonAnyGetter

    public Map<String, String> getValues() {

        return values;

    }


    @Override

    public String toString() {

        return values.toString();

    }

}


class DynamicJsonsFactory {


    public Value createUser(String name) {

        return any("name", name);

    }


    public Value createPhone(String number) {

        return any("phone", number);

    }


    public Value any(String key, String value) {

        Value v = new Value();

        v.put(Objects.requireNonNull(key), Objects.requireNonNull(value));


        return v;

    }

}

上面的代碼打?。?/p>


{"name":"Vika"}

{"phone":"123-456-78-9"}

{"val":"VAL!"}


查看完整回答
反對 回復 2022-10-07
?
千萬里不及你

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

您可以將所有可能的名稱作為變量,并對它們進行注釋,以便在為 null 時忽略它們。這樣,您只能在 JSON 中獲取具有值的


然后更改您的設置器以輸入映射到您想要的鍵的變量。


class Value {


    @JsonProperty("val")

    @JsonInclude(JsonInclude.Include.NON_NULL)

    private String val;


    @JsonProperty("new_key")

    @JsonInclude(JsonInclude.Include.NON_NULL)

    private String newKey;


    @JsonProperty("any_random_string")

    @JsonInclude(JsonInclude.Include.NON_NULL)

    private String anyRandomString;


    public void setVal(String s) {

        if(/* condition1 */)

            this.val = s;

        else if (/* condition2 */) {

            this.newKey = s;

        } else  if (/* condition3 */) {

            this.anyRandomString = s;

        }

    }


}



查看完整回答
反對 回復 2022-10-07
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

好問題@Prasad,這個答案與 JAVA 或 SPRING BOOT 無關,我只是提出這個答案,因為我搜索過使用 node 來做到這一點,并希望這能以某種方式幫助某人。在 JAVASCRIPT 中,我們可以為 JSON 對象添加動態屬性名稱,如下所示


var dogs = {};


var dogName = 'rocky';


dogs[dogName] = {

    age: 2,

    otherSomething: 'something'

};


dogName = 'lexy';


dogs[dogName] = {

    age: 3,

    otherSomething: 'something'

};


console.log(dogs);

但是當我們需要動態更改名稱時,我們必須

  1. 得到那個屬性

  2. 并創建另一個具有相同內容和新名稱的屬性

  3. 并從 JSON 中刪除舊屬性

  4. 將新屬性分配給 JSON

除此方法外,還有另一種動態更改 JSON 名稱的方法,在此先感謝


查看完整回答
反對 回復 2022-10-07
  • 3 回答
  • 0 關注
  • 320 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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