最開始問題是在c層的單元測試中產生的:
報錯提示我們說:引用瞬態值,引用之前應該儲存一下。
1.這好說,一看是minmeasurescaleunit
沒有儲存,那麼儲存一下就行了。然而沒有用。
2.既然不起作用,那麼說明這是別的方式引起的。斷點除錯一下。
發現在模擬發起http請求
之前,minmeasurescaleunit
的值是存在的,並且已經儲存,但是傳到方法中的時候就出問題了,minmeasurescaleunit
成乙個空物件了。這就說明在轉換成json字串
的時候出現問題了。
然後,斷點看一下轉換的內容,找到minmeasurescaleunit
:
看到這裡突然想起這個好像前面有遇到過,下面簡單說下產生問題的原因:
$ref
這代表了是一種引用,它是fastjson
在轉換json字串
的時候出現的,在引用了同一物件時出現。「
$
」代表根物件,所以後面就是告訴我們引用了哪個物件。當後台接收這種形式的
json物件
的時候,並沒有將引用再替換回來,所以minmeasurescaleunit
就不是我們最開始的物件了,也就出現了最開始的沒有儲存的問題。
fastjson
已經提供給我們了解決辦法,在轉換的時候,新增乙個引數serializerfeature.disablecircularreferencedetect
,禁用引用就行了:
string jsonobject = json.tojsonstring(newnonmandatoryinstrument, serializerfeature.disablecircularreferencedetect);
這個問題前面的時候遇到過,但是沒有及時的複習,導致這次解決問題的時候又用了不少的時間。 fastjson輸出json字串ref問題
最近在排查問題的時候,日誌列印的採用物件的輸出的方式是jsonobject.tojsonstring object 的方式,發現乙個問題,會列印出 ref的符號。最開始懷疑是框架的問題,後來檢視了原始碼發現問題並沒這麼簡單,這是fastjson庫的乙個特性。是為了節省列印空間也為了表示物件引用關係。...
Golang引用型別,型別轉換,字串
引 用型別包括 slice map 和 channel。它們有複雜的內部結構,除了申請記憶體外,還需 要初始化相關屬性。內建函式 new 計算型別大小,為其分配零值記憶體,返回指標。而 make 會被編譯器翻譯 成具體的建立函式,由其分配記憶體和初始化成員結構,返回物件而非指標。a int 提供初始...
fastJson按照字串順序遍歷JSON欄位
原文 fastjson在把json格式的字串轉換成jsonobject的時候,使用的是hashmap,所以排序規則是根據hash值排序的,如果想要按照字串順序遍歷json屬性,需要在轉換的時候指定使用linkedhashmap代替hashmap。public static void main str...