我正在Jersey上构建REST服务,并使用Jackson从我模型的java类生成JSON。模型具有绝对简单的值,我认为这是最典型的情况。但我得到了奇怪的结果:
[{\"name\":\"Nick\",\"role\":\"admin\",\"age\":\"32\",\"rating\":47}]
我的期待结果:
[{"name":"Nick","role":"admin","age":"32","rating":47}]
我的字段源值不包含任何特殊字符。这些是简单的单词。
这是我的Java类。实体:
public class User {
private String name;
private String role;
private String age;
private Integer rating;
Rest服务等级:
@ServiceConfig(contextName = "myContext")
@Path("/myrest")
public class MyRestService {
private static final String JSON_CONTENT_TYPE = MediaType.APPLICATION_JSON + ";charset=UTF-8";
@Context
protected HttpServletResponse response;
@GET
@Path("/users")
@OpenTransaction
@Produces({MediaType.APPLICATION_JSON})
public String findUsers(@QueryParam("department") String department) {
response.setContentType(JSON_CONTENT_TYPE);
PDTResponse.status(response).sendStatus(Response.Status.OK.getStatusCode());
List<User> users = new ArrayList<>();
users.add(new User("Nick", "admin", "32", 47));
String jsonInString;
ObjectMapper mapper = new ObjectMapper();
try {
jsonInString = mapper.writeValueAsString(users);
} catch (JsonProcessingException ex) {
jsonInString = "thrown exception: " + ex.getMessage();
}
return jsonInString;
}
我尝试使用注释JsonRawValue来表示字符串属性:
@JsonRawValue
private String name;
但在这种情况下,结果是:
[{\"name\":Nick,\"role\":admin,\"age\":32,\"rating\":47}]
我期望:
[{"name":"Nick","role":"admin","age":"32","rating":47}]
很明显,Jackson以某种方式逃避了响应结果json中的引用。但它为什么这样做,最重要的是如何避免?它们本身就是绳子!没有任何引号或特殊字符。
我使用Java 7和Jackson 2.6.1。和邮递员测试结果。有解决我问题的办法吗?
这样做。
ObjectMapper mapper = new ObjectMapper();
mapper.getFactory().setCharacterEscapes(new JsonUtil().new CustomCharacterEscapes());
ObjectWriter writer = mapper.writer();
String jsonDataObject = mapper.writeValueAsString(configMap);
public class CustomCharacterEscapes extends CharacterEscapes {
private final int[] _asciiEscapes;
public CustomCharacterEscapes() {
_asciiEscapes = standardAsciiEscapesForJSON();
//By default the ascii Escape table in jackson has " added as escape string
//overwriting that here.
_asciiEscapes['"'] = CharacterEscapes.ESCAPE_NONE;
}
@Override
public int[] getEscapeCodesForAscii() {
return _asciiEscapes;
}
@Override
public SerializableString getEscapeSequence(int i) {
return null;
}
}
java中的所有字符串都必须在其中转义引号。所以jsonInString应该有斜杠。当您输出jsonInString时,虽然它不应该有引号。您是在调试器中查看它还是什么?
您可以配置ObjectMapper:
final ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
String jsonUsers = mapper.writeValueAsString(users);
更多信息在这里
问题内容: 我试图使用Gson将Java对象转换为json。但是当我尝试打印出来时,我得到了这个JSON {“ user”:“ {\” email \“:\” abc@gmail.com \“,\” lastName \“:\” Las \“,\” name \“:\” amy \“,\” password \“:\” qwe123 \“,\”电话\“:\” 8901245244 \“}”} 我试
我调用一个Web服务来获取JSON字符串响应,它包含的反斜杠不是原始字符串。下面是我请求JSON字符串对象的代码,它是:{“name”:“name”,“id”:1} 在后执行中,我只是尝试将这个resush字符串解析为JSONObject。 Rsponse字符串是:“{\'name\':\'name\',\'id\':1}”,当我试图将其解析为JSONObject时,它会抛出一个异常:org。js
使用Jacksons的ObjectMapper,如果我尝试将已经包含反斜杠的字符串转换为字节数组,然后将该字节数组更改回字符串,则输出包含一个额外的反斜杠。以下代码显示了该问题 有没有办法配置ObjectMapper,使mapper#writeValueAsBytes方法不会将字符串Test\string更改为Test\\string?有没有其他方法可以使用Jackson/ObjectMapper
问题内容: 我已经使用了很长时间了,到目前为止我还没有遇到任何问题。现在,我正在使用上传脚本,并且尝试在文件上传后返回一些JSON数据。 我有以下代码: 这给了我以下结果: 谁能告诉我为什么加斜杠? 更新 @Quentin说,事情是发生之间和与他的权利。 做一个给我以下结果: 这不是有效的JSON。它还添加,我不知道它来自哪里。 可能对我返回的数据有影响吗? 这是我的js脚本: 问题答案: 谁能告
问题内容: 我正在尝试使用Json.NET将列表序列化为json字符串,但返回字符串中包含反斜杠,这反过来使json解析失败。 上面的代码返回 这将导致所有JSON解析失败。如何删除这些。 问题答案: 不,不是 可能有两个问题: A)您正在查看调试器的结果。为了检查这一点,将其放入一个临时变量中(就像我所做的一样),然后使用调试器进行查看。单击沙漏右箭头,然后选择。 要么 B)调用方法将对象 再次
要发布一个插件,我必须更改代码以使用Wordpress HTTP API。 因此,我翻译了我的代码。 之前。 之后 但是对于函数wpremotepost我有这个问题。 当JSON数据发送到远程主机时,数据内部带有反斜杠。 示例: 怎么啦? 我在翻译原点代码时有错吗? 我需要一些帮助来发送没有这些转义字符的JSON数据。 多谢了。