在Java中构建JSON字符串的正确方法是什么,这样你就不会在结果中得到额外的斜杠字符?

问题描述 投票:0回答:1

我在后端使用Spring MVC,前端使用BootstrapjQuery。

我的WebController的REST Web服务与UserService对话,做一些事情,并返回一个包含字符串的Messages对象。

问题是,当JSON返回到浏览器时,它有额外的\字符在里面......

举个例子。

{"readyState":4,"responseText":"{\"success\":false,\"messages\":\"{\\\"error\\\":\\\"Error modifying the user.\\\"}\"}" ...

经过搜索,看起来可能是嵌套的JSON数据导致了这个问题?

我是这样构建的......。

import com.fasterxml.jackson.databind.ObjectMapper;

public String toJSON() {
    String sRet = "";

    Map<String,String> messages = new HashMap<String,String>();
    messages.put("error", "Error modifying the user.");

    ObjectMapper mapper = new ObjectMapper();
    try {
        sRet = mapper.writeValueAsString(messages);
    } catch (Exception x) {
        // ...
    }

    return sRet;
}

然后像这样返回给浏览器......。

@RequestMapping(value = "/json/user", method = RequestMethod.POST)
public ResponseEntity<String> modifyUser(@RequestBody String json) throws Exception {
    boolean bSuccess = true;

/* ... do the modify user stuff which builds a Messages object, and sets bSuccess = false if there's an error ... */

    JSONObject replyObj = new JSONObject();
    replyObj.put("success", bSuccess);
    replyObj.put("messages", messages.toJSON());
    return new ResponseEntity<String>(replyObj.toJSONString(), (bSuccess) ? HttpStatus.OK : HttpStatus.BAD_REQUEST);        
}

正确的构建JSONObject的方法是什么,使它没有多余的斜杠?

javascript java json spring-rest objectmapper
1个回答
0
投票

就个人而言,我总是使用 GSON 当在java中处理JSON时,你的问题与嵌套JSON有关。

你是对的,你的问题与嵌套JSON有关,你在消息中添加了一个包含""的字符串,它逃逸了这些,因为它认为你想要这样的字面字符串。它不知道它也是一个对象。

你有没有试过只做这个?

replyObj.put("messages", messages);
© www.soinside.com 2019 - 2024. All rights reserved.