Resteasy:如何使用非固定键保存 JSON

Resteasy: how to save JSON with not fixed keys

我使用 reasteasy 来调用 REST API。

我的问题是来自 REST API 的 JSON 具有动态值。例如:

 "labels": {
           "kubernetes.io/hostname": "192.168.200.176",
           "node": "master"
         }

其中 "node" 和 "kubernetes.io/hostname" 可以是任何字符串。

我试图将 "labels" 映射到 Map <String, String> 对象中。变量已正确创建,但仍为空。我怎样才能生成一个字典,例如 {"kubernetes.io/hostname": "192.168.200.176", "node": "master"}?`

如果您只需要创建一个 Map 而不是特定的域对象,您可以简单地自己解析 JSON 以获取键列表并自己创建 Map。

这是一个使用 org.json 的例子:

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

public class Scratch {
    public static void main(String[] args) throws Exception {
        String json = "{ \"labels\": { \"kubernetes.io/hostname\": \"192.168.200.176\", \"node\": \"master\" } }";
        Map<String, String> library = new HashMap<>();

        // parse the input string
        JSONObject labels = new JSONObject(json).getJSONObject("labels");

        // iterate over keys and insert into Map
        for (String key : labels.keySet()) {
            library.put(key, labels.getString(key));
        }

        System.out.println(library);
        // {kubernetes.io/hostname=192.168.200.176, node=master}
    }
}


您也可以用 Gson 做或多或少相同的事情,只需将 Map 包装在容器 class 中,然后让它进行实际的反序列化:

import java.util.Map;
import com.google.gson.Gson;

public class Scratch {
    public static void main(String[] args) throws Exception {
        String json = "{ \"labels\": { \"kubernetes.io/hostname\": \"192.168.200.176\", \"node\": \"master\" } }";

        Library library = new Gson().fromJson(json, Library.class);
        System.out.println(library.labels);
        // {kubernetes.io/hostname=192.168.200.176, node=master}
    }
}

class Library {
    Map<String, String> labels;
}


在这两种情况下,请注意您必须从 JSON 的 "labels" 字段中获取数据,而不是从顶层获取数据。