FastJsonを覚えて穴を踏む
4772 ワード
FastJsonはアリババ傘下のチームが開発した高性能Jsonフレームワークで、簡単で使いやすく、機能が強いが、細部の使用が不適切であれば、雷を踏みやすい.ここで私の開発過程で出会った2つの穴を分かち合います.
ピット1フィールドの順序のデフォルトのソート
ある銀行とデバッグをするとき、Jsonテキストを要約として署名します.署名の要約とチェックの要約は、転送と解析を経て、フィールドの順序が変化し、署名とチェックの要約が一致せず、チェックの失敗を招いたため、複数回のテストに失敗しました.解決策: jsonオブジェクトを作成する場合、構造パラメータはtrueであり、自動ソートを行わない固定順序を意味します.
これにより、次のコードを実行するときに自動的にソートされるのではなく、挿入順に厳格にソートされます.文字列がjsonオブジェクトとして解析する場合、パラメータFeatureを追加する.OrderedFieldは、固定順序の役割も果たしています.
このように,解析したjsonオブジェクトとjson文字列の順序は完全に一致する.
ピット二エスケープ文字
ダイレクトコード
実行結果:
注意obj_2の値引用符とエスケープ文字
成長を記録し、生活を愛する!
ピット1フィールドの順序のデフォルトのソート
ある銀行とデバッグをするとき、Jsonテキストを要約として署名します.署名の要約とチェックの要約は、転送と解析を経て、フィールドの順序が変化し、署名とチェックの要約が一致せず、チェックの失敗を招いたため、複数回のテストに失敗しました.解決策:
JSONObject json = new JSONObject(true);
json.put......
これにより、次のコードを実行するときに自動的にソートされるのではなく、挿入順に厳格にソートされます.
String jsonString = json.toJSONString();
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の値引用符とエスケープ文字
成長を記録し、生活を愛する!