我有一个独特的要求,我需要构建一个JSON,如下所示。
{
"XXXMonitoring/DC/EVN/DBNAME":{
"t":123456777,
"s":{
"CAPTURE":{
"c":100
}
}
}
}
其中根元素" XXXMonitoring / DC / EVN / DBNAME"包含" /"在它之间,因为它代表了一条道路。我尝试使用GSON来嵌套java,但不确定我如何表示" XXXMonitoring / DC / EVN / DBNAME"来自我的Java对象。
有人可以帮我解决这个问题吗。
答案 0 :(得分:0)
我不确定这是不是你要问的......
但sollidus(/)会被反斜杠(\)转义,以确保浏览器不会将其误认为是关闭脚本标记
当您需要使用该密钥时,可以使用String.replaceAll()方法删除反斜杠
json.toString()。replaceAll(" \\\\","");
答案 1 :(得分:0)
使用以下代码可以在没有POJO类的情况下构造JSON字符串。
如果JSON结构相同且只有键的值会发生变化,则可以使用变量替换硬编码值,并将其转换为实用程序方法。可以重用该实用程序方法来生成JSON字符串。
public static void main(String[] args) throws IOException {
Gson gson = new Gson();
JsonObject jsonRootObject = new JsonObject();
JsonObject jsonFirstLevelObject = new JsonObject();
// t property
jsonFirstLevelObject.addProperty("t", 123456777);
JsonObject jsonCaptureObject = new JsonObject();
JsonObject jsonCObject = new JsonObject();
jsonCObject.addProperty("c", 100);
jsonCaptureObject.add("CAPTURE", jsonCObject);
// s property
jsonFirstLevelObject.add("s", jsonCaptureObject);
jsonRootObject.add("XXXMonitoring/DC/EVN/DBNAME", jsonFirstLevelObject);
System.out.println(gson.toJson(jsonRootObject));
}
答案 2 :(得分:0)
我有一个名为GsonPath的库,可能符合您的需求。该库的目的是提供一个注释处理器,该处理器生成样板代码以帮助简化您需要编写的POJO。
通过使用库,您可以编写类似于以下内容的POJO:
@AutoGsonAdapter(rootField = "XXXMonitoring/DC/EVN/DBNAME")
public class SamplePojo {
int t;
@SerializedName("s.CAPTURE.c")
int sCapture;
}
然后您在gson
对象中需要做的就是注册一个特殊的TypeAdapterFactory
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapterFactory(GsonPath.createTypeAdapterFactory());
Gson gson = builder.create();
library中的文档非常全面,如果您有任何问题,请告诉我们!