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

Java Resteasy:如何使用非固定键保存JSON,java,json,resteasy,Java,Json,Resteasy,我使用reasteasy调用restapi 我的问题是RESTAPI中的JSON具有动态值。例如: "labels": { "kubernetes.io/hostname": "192.168.200.176", "node": "master" } 其中“node”和“kubernetes.io/hostname”可以是任何字符串 我尝试将“标签”映射到map对象中。变量已正确创建,但仍为空。如何生成一个字典,例如{“kuber

我使用reasteasy调用restapi

我的问题是RESTAPI中的JSON具有动态值。例如:

 "labels": {
           "kubernetes.io/hostname": "192.168.200.176",
           "node": "master"
         }
其中“node”和“kubernetes.io/hostname”可以是任何字符串


我尝试将“标签”映射到
map
对象中。变量已正确创建,但仍为空。如何生成一个字典,例如
{“kubernetes.io/hostname”:“192.168.200.176”,“node”:“master”}
?`

如果您只需要创建一个映射而不是一个特定的域对象,那么您只需自己解析JSON就可以得到一个键列表,然后自己创建映射

下面是一个示例,使用:

import java.util.HashMap;
导入java.util.Map;
导入org.json.JSONObject;
公共课刮刮{
公共静态void main(字符串[]args)引发异常{
字符串json=“{\'labels\”:{\'kubernetes.io/hostname\”:\'192.168.200.176\,\'node\':\'master\'}”;
映射库=新的HashMap();
//解析输入字符串
JSONObject标签=新的JSONObject(json).getJSONObject(“标签”);
//迭代关键点并插入到地图中
for(字符串键:labels.keySet()){
library.put(key,labels.getString(key));
}
System.out.println(库);
//{kubernetes.io/hostname=192.168.200.176,node=master}
}
}

您还可以通过简单地将映射包装在容器类中,并让它执行实际的反序列化,来或多或少地执行相同的操作:

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;
}
import java.util.Map;
导入com.google.gson.gson;
公共课刮刮{
公共静态void main(字符串[]args)引发异常{
字符串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}
}
}
类库{
地图标签;
}


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

如果您只需要创建一个映射而不是一个特定的域对象,您只需自己解析JSON即可获得一个键列表,然后自己创建映射

下面是一个示例,使用:

import java.util.HashMap;
导入java.util.Map;
导入org.json.JSONObject;
公共课刮刮{
公共静态void main(字符串[]args)引发异常{
字符串json=“{\'labels\”:{\'kubernetes.io/hostname\”:\'192.168.200.176\,\'node\':\'master\'}”;
映射库=新的HashMap();
//解析输入字符串
JSONObject标签=新的JSONObject(json).getJSONObject(“标签”);
//迭代关键点并插入到地图中
for(字符串键:labels.keySet()){
library.put(key,labels.getString(key));
}
System.out.println(库);
//{kubernetes.io/hostname=192.168.200.176,node=master}
}
}

您还可以通过简单地将映射包装在容器类中,并让它执行实际的反序列化,来或多或少地执行相同的操作:

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;
}
import java.util.Map;
导入com.google.gson.gson;
公共课刮刮{
公共静态void main(字符串[]args)引发异常{
字符串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}
}
}
类库{
地图标签;
}

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