美文网首页
震惊!解析JSON字符串用了两个小时

震惊!解析JSON字符串用了两个小时

作者: ifeelok0319 | 来源:发表于2017-07-07 20:12 被阅读157次

需要解决的问题

需求

前端访问/first/path/parm?parm1=parm1&parm2=parm2,后台查询结果,返回String字符串。
但是,重点来了,/first/path/parm并不能查询数据库,需要把请求发送给/second/path/parm查询,得到结果才能再丢给浏览器。

解决步骤

  • 前端访问/first/path/parm?parm1=parm1&parm2=parm2
  • 解析得到parm1parm2,转发到/second/path/parm?parm1=parm1&parm2=parm2
  • SearchResultModel转成String发送给/first/path/parm
  • /first/path/parm将结果转换为JSON处理之后,再转换成字符串返回给前端

解决步骤

  • /first/path/parm写好了,可以得到参数,并发送给/second/path/parm,可以将字符串解析成对象,再将对象转换为字符串
  • /second/path/parm写好了,可以将查询结果转换为字符串,并发送给/first/path/parm
  • 对接出现问题了,/first/path/parm居然不能解析/second/path/parm生成的JSON字符串。

问题具体化及解决方案

用到的工具

JSON解析库:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.7</version>
</dependency>

/second/path/parm返回结果代码:

SearchResultResponse res = elasticSearchDao.searchByContent(content, isvId, pageId, size, status);
response = JSON.toJSONString(res);
return response;

response内容如下:

{"results"["24400576","25235505","58394962","26742017","25789087","26938194","19395051","76716273","20142157","29667266"],"total":103}

/first/path/parm解析该字符串的代码:

String result = searchService.search(isvid, key, curPage, pageSize, status);
JSONObject map = JSON.parseObject(result);//这句总是报错

报错信息:

java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject

查看content

"{\"total\":0,\"results\":[]}"

将此content单独运行是正确的:

public class Hello {
    public static void main(String[] args) {
        String s = "{\"total\":0,\"results\":[]}";
        JSONObject json = JSON.parseObject(s);
        System.out.println(JSON.toJSONString(json));
    }
}

结果:

{"total":0,"results":[]}

接着调了很长时间代码...

两个小时之后出现了这个解决方案:

result = result.substring(1, result.length()-1).replaceAll("\\\\", "");

相关文章

网友评论

      本文标题:震惊!解析JSON字符串用了两个小时

      本文链接:https://www.haomeiwen.com/subject/pdurhxtx.html