返回到前端的JSONObject里面多了斜杠,表现形式如下:
{ "returnCode": "0", "beans": [ "{\"squestion\":\"开通常州下午天气预报\"}", "{\"squestion\":\"开通南通下午天气预报\"}", "{\"squestion\":\"取消南通下午天气预报\"}" ], "returnMessage": "操作成功!" }
而后台打印的JSONObject如下:
[{"squestion":"开通常州下午天气预报"}, {"squestion":"开通南通下午天气预报"}, {"squestion":"取消南通下午天气预报"}]
后台代码如下(部分代码):
package com.zx.znydweb.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.zx.znyd.service.CustsetInfoService;
import com.zx.znyd.service.InputAssociationService;
import kafka.utils.Json;
@Controller
public class InputAssociationController {
private static final Logger logger = LoggerFactory
.getLogger(InputAssociationController.class);
@Autowired
@Qualifier("inputAssociationServiceImpl")
private InputAssociationService inputAssociationService;
public Map<String, Object> setReturnMap(String returncode,
String returnmessage, Map<String, Object> ret) {
if (ret == null) ret = new HashMap<String, Object>();
ret.put("returnCode", returncode);
ret.put("returnMessage", returnmessage);
return ret;
}
/**
* 输入联想查询接口
*/
@ResponseBody
@RequestMapping(value = "/qryInputAssociation", method = RequestMethod.GET)
public Map qryCustsetInfo(
@RequestParam(value = "l", required = true) String l,
@RequestParam(value = "c", required = true) String c,
@RequestParam(value = "words", required = true) String words,
HttpServletRequest req) {
logger.info("输入联想查询接口qryInputAssociation入参:l:{},c:{},words:{}",l,c,words);
Map<String, Object> retmap = new HashMap<String, Object>();
ArrayList<String> inputAssociationJson = inputAssociationService
.getInputAssociation(l, c, words);
ArrayList<String> inputAssociationNew=new ArrayList<>();
if((null!=inputAssociationJson)&&(inputAssociationJson.size()>0)){
JSONObject jsonObject=new JSONObject();
for(String elem:inputAssociationJson){
jsonObject.put("squestion", elem);
inputAssociationNew.add(jsonObject.toJSONString());
}
System.out.println(inputAssociationNew);
}
retmap.put("beans", inputAssociationNew);
return setReturnMap("0", "操作成功!", retmap);
}
}
先说解决办法,修改后的代码如下;
package com.zx.znydweb.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.zx.znyd.service.CustsetInfoService; import com.zx.znyd.service.InputAssociationService; import kafka.utils.Json; @Controller public class InputAssociationController { private static final Logger logger = LoggerFactory .getLogger(InputAssociationController.class); @Autowired @Qualifier("inputAssociationServiceImpl") private InputAssociationService inputAssociationService; public Map<String, Object> setReturnMap(String returncode, String returnmessage, Map<String, Object> ret) { if (ret == null) ret = new HashMap<String, Object>(); ret.put("returnCode", returncode); ret.put("returnMessage", returnmessage); return ret; } /** * 输入联想查询接口 */ @ResponseBody @RequestMapping(value = "/qryInputAssociation", method = RequestMethod.GET) public Map qryCustsetInfo( @RequestParam(value = "l", required = true) String l, @RequestParam(value = "c", required = true) String c, @RequestParam(value = "words", required = true) String words, HttpServletRequest req) { logger.info("输入联想查询接口qryInputAssociation入参:l:{},c:{},words:{}",l,c,words); Map<String, Object> retmap = new HashMap<String, Object>(); ArrayList<String> inputAssociationJson = inputAssociationService .getInputAssociation(l, c, words); ArrayList<String> inputAssociationNew=new ArrayList<>(); JSONArray jsonArray=new JSONArray(); if((null!=inputAssociationJson)&&(inputAssociationJson.size()>0)){ for(String elem:inputAssociationJson){ JSONObject jsonObject=new JSONObject(); jsonObject.put("squestion", elem); System.out.println(jsonObject); jsonArray.add(jsonObject); } System.out.println(jsonArray); } retmap.put("beans", jsonArray); return setReturnMap("0", "操作成功!", retmap); } }
即将返回的ArrayList改为JSONArray。
问题原因,如果返回ArrayList,返回到前端的字符串解析了两次,故出现多了斜杠的现象。
又有同学会问,为什么不把for循环里面的
JSONObject jsonObject=new JSONObject();
放到for循环外面?
至于这个问题,你们可以自己把它放到for循环外面试试!