在JSON中遇到的一些坑

lonecloud發表於2018-08-02

今天在進行壓測的時候,由於需要使用到json進行傳參,並且需要在JMeter中加入少量的JSON,由於JSON在java中呈現鍵值對的形式,並且需要使用到“”來修飾,導致只能使用\進行轉義,在傳送請求的時候,還需要對相關資料進行RSA加密,很奇怪的事情發生了,編寫了三個json,有兩個json傳送到後臺後,是正常的可以進行RSA加簽以及驗籤的,有一個JSON死活都過不去。

發現問題:一段JSON通過加簽,正常,傳送到伺服器後,進行驗籤操作的時候,出現,驗籤不通過。

解決問題:

1. 檢查公私鑰是否正確,由於分析前兩個祕鑰是正常的,可以排除祕鑰不一致的問題

2. 是否由於驗證簽名方法出現了問題?檢查方法後發現沒有問題

3. 檢查JSON是否出現問題?初步檢查沒有問題;

JOSN通過轉化後出現如下圖

"{\"sequenceNo \":\"201806050054"+vars.get("quotaNo")+"\"," +
		"\"ts\":\"1318041322348\"}"

4. 再次檢查JSON後發現,在sequenceNo 前面有一個空格,沒有發現

5. 刪除空格後,驗證後成功

問題分析:

1. 由於在JSON中存在空格,暫時沒有發現導致,為什麼會出現這種問題?有以下幾個原因:

      介面文件中存在空格;

      由於源文件中存在空格是沒有問題的,但是由於在後臺處理的時候,將其通過fastjson轉換成了Object類,由於轉換後又將Object序列化層JSON字串後,導致空格丟失,再進行驗證RSA時候導致驗證不通過,導致出現上述問題。

總結:

  1. 謹慎使用JSON字串進行拼接。

  2. 如果需要轉換成JSON字串,最好採用工具進行轉換,防止此次問題的發生

相關文章