当前位置: 首页 > 知识库问答 >
问题:

Jackson在json中添加反斜杠

凌朗
2023-03-14

我正在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。和邮递员测试结果。有解决我问题的办法吗?

共有3个答案

陆城
2023-03-14

这样做。

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;
    }
  }
史景铄
2023-03-14

java中的所有字符串都必须在其中转义引号。所以jsonInString应该有斜杠。当您输出jsonInString时,虽然它不应该有引号。您是在调试器中查看它还是什么?

杜英范
2023-03-14

您可以配置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数据。 多谢了。