簡體   English   中英

如何通過Gson在json中創建javascript function?

[英]How to create javascript function within json by Gson?

是否可以通過 Gson 像這樣創建 json? 沒有鑰匙的javascript function在json里面。

{
    autosave: {
        save( editor ) {
            return editor.saveData( editor.id, editor.getData() );
        },
        waitingTime: 2000
}

提前致謝。

最后,我找到了一種使用 TypeAdapterFactory 來完成它的方法。 這是代碼。

class AutosaveAdapter implements TypeAdapterFactory {

    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> tokenType) {
        final TypeAdapter<T> adapter = gson.getDelegateAdapter(this, tokenType);

        return new TypeAdapter<T>() {
            @Override
            public T read(JsonReader reader) throws IOException {
                return adapter.read(reader);
            }

            @Override
            public void write(JsonWriter writer, T value) throws IOException {
                JsonElement tree = adapter.toJsonTree(value);

                if (value instanceof Autosave) {
                    String dom = value.toString();
                    JsonObject jo = (JsonObject) tree;
                    jo.addProperty("autosave", dom );
                }
                gson.getAdapter(JsonElement.class).write(writer, tree);
            }
        };
    }
}

class Autosave {

    int waitingTime;

    @Expose(serialize = false, deserialize = false)
    String name;

    @Expose(serialize = false, deserialize = false)
    String arguments;

    @Expose(serialize = false, deserialize = false)
    String body;

    Autosave(int waitingTime, String name, String arguments, String body) {
        this.waitingTime = waitingTime;
        this.name = name;
        this.arguments = arguments;
        this.body = body;
    }

    public String toString() {
        return "{ waitingTime:" + waitingTime + "," +
                  name +" ( "+arguments+" ) { " + body + " } "+
                "}";
    }
    
}

去測試:

public static void main(String... args) {
        Autosave autosave = new Autosave(2000, "save", "editor", "return editor.saveData( editor.id, editor.getData() );");
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setLenient();
        Gson gson = gsonBuilder
                .excludeFieldsWithoutExposeAnnotation()
                .registerTypeAdapterFactory(new AutosaveAdapter())
                .create();
        System.out.println(gson.toJson(autosave));
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM