【发布时间】:2019-02-07 15:51:12
【问题描述】:
嗨,当我使用以下代码时,它工作正常:
Map<String, Object> commandParams = new HashMap<>();
commandParams.put("cmd", "Page.setDownloadBehavior");
Map<String, String> params = new HashMap<>();
params.put("behavior", "allow");
params.put("downloadPath", downloadPath);
commandParams.put("params", params);
HttpClient httpClient = HttpClientBuilder.create().build();
ObjectMapper objectMapper = new ObjectMapper();
String command = objectMapper.writeValueAsString(commandParams);
现在我想从我的项目中删除所有依赖项,所以我尝试使用 this link 中的这种方法,但它不起作用,因为键和值对中包含“(双引号)。:
Map<String, Object> commandParams = new HashMap<>();
commandParams.put("cmd", "Page.setDownloadBehavior");
Map<String, String> params = new HashMap<>();
params.put("behavior", "allow");
params.put("downloadPath", downloadPath);
commandParams.put("params", params);
HttpClient httpClient = HttpClientBuilder.create().build();
String command ="{"+commandParams.entrySet().stream().map(e -> "\""+e.getKey() + "\"" + ":\"" + String.valueOf(e.getValue()) + "\"").collect(Collectors.joining(", "))+"}";
所以我尝试直接保存字符串命令,就像在使用下面的代码从杰克逊罐子中使用 ObjectMapper 类之后一样,但这也不起作用:
Map<String, Object> commandParams = new HashMap<>();
commandParams.put("cmd", "Page.setDownloadBehavior");
Map<String, String> params = new HashMap<>();
params.put("behavior", "allow");
params.put("downloadPath", downloadPath);
commandParams.put("params", params);
HttpClient httpClient = HttpClientBuilder.create().build();
String command = "{\"cmd\":\"Page.setDownloadBehavior\",\"params\":{\"downloadPath\":\"C:\\\\Users\\\\I334253\\\\Downloads\\\\Test_Download\",\"behavior\":\"allow\"}}";
使用 ObjectMapper 类后 Command 变量的输出为:
{"cmd":"Page.setDownloadBehavior","params":{"downloadPath":"C:\\Users\\I334253\\Downloads\\Test_Download","behavior":"allow"}}
我尝试浏览 jackson-databind github 项目,但在这个级别上我无法理解它。请告诉我如何实现这一目标。
【问题讨论】:
-
太难理解了,因为写一个json解析器的工作量很大。那么为什么要实现自己的呢?
-
我个人更喜欢编写 POJO 类并在重写的 toString() 方法中做这些事情
-
@Deadpool 任何你可以参考我的网站或博客,这样我就可以理解这些东西并为我自己实现一个。因为我不太熟悉。
标签: java json hashmap jackson jackson-databind