FastJsonを覚えて穴を踏む

4772 ワード

FastJsonはアリババ傘下のチームが開発した高性能Jsonフレームワークで、簡単で使いやすく、機能が強いが、細部の使用が不適切であれば、雷を踏みやすい.ここで私の開発過程で出会った2つの穴を分かち合います.
ピット1フィールドの順序のデフォルトのソート
ある銀行とデバッグをするとき、Jsonテキストを要約として署名します.署名の要約とチェックの要約は、転送と解析を経て、フィールドの順序が変化し、署名とチェックの要約が一致せず、チェックの失敗を招いたため、複数回のテストに失敗しました.解決策:
  • jsonオブジェクトを作成する場合、構造パラメータはtrueであり、自動ソートを行わない固定順序を意味します.
  • JSONObject json = new JSONObject(true);
    json.put......
    

    これにより、次のコードを実行するときに自動的にソートされるのではなく、挿入順に厳格にソートされます.
    String jsonString = json.toJSONString();
    
  • 文字列がjsonオブジェクトとして解析する場合、パラメータFeatureを追加する.OrderedFieldは、固定順序の役割も果たしています.
  • String jsonString2 = "xxxxxx";
    JSONObject json2 = JSON.parseObject(jsonString2,Feature.OrderedField);
    ......
    

    このように,解析したjsonオブジェクトとjson文字列の順序は完全に一致する.
    ピット二エスケープ文字
    ダイレクトコード
    JSONObject json = new JSONObject(true);
    
    JSONObject obj = new JSONObject();
    obj.put("name","zhangsan");
    
    json.put("obj_1",obj);//**      
    json.put("obj_2",JSON.toJSONString(obj));//   json      
    System.out.println(json);
    

    実行結果:
    {"obj_1":{"name":"zhangsan"},"obj_2":"{\"name"\":\"zhangsan\"}"}
    

    注意obj_2の値引用符とエスケープ文字
    成長を記録し、生活を愛する!