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" 字段中获取数据,而不是从顶层获取数据。
我使用 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" 字段中获取数据,而不是从顶层获取数据。