ショック!JSON文字列の解析に2時間かかりました

2702 ワード

解決すべき問題
需要
フロントエンドは/first/path/parm?parm1=parm1&parm2=parm2にアクセスし、バックグラウンドは結果をクエリーし、String文字列を返します.しかし、ポイントが来て、/first/path/parmはデータベースを照会することができなくて、要求を/second/path/parmに送って照会して、結果を得てやっとブラウザに捨てることができます.
解決手順
  • フロントエンドアクセス/first/path/parm?parm1=parm1&parm2=parm2
  • 解析によりparm1およびparm2が得られ、/second/path/parm?parm1=parm1&parm2=parm2
  • に転送する.
  • は、SearchResultModelStringに変換する/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解析ライブラリ:
    
        com.alibaba
        fastjson
        1.2.7
    
    
    /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":[]}
    

    長い間コードを調整しました
    2時間後にこのソリューションが登場しました.
    result = result.substring(1, result.length()-1).replaceAll("\\\\", "");