返回到前端的JSONObject里面多了斜杠

返回到前端的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循环外面试试!

 

转载于:https://www.cnblogs.com/lchzlp/p/8931303.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值