目前在專案中遇到乙個問題,就是需要把第三方的介面資料儲存到本地資料庫中,但是不確定第三方介面返回的資料格式,該咋辦呢?
現在有兩個問題需要處理:
第三方介面返回的資料是json,xml(其他格式不予認可)格式,如何在不重新開發程式的情況下適配?
接收到的資料該怎樣包裝才能儲存到我們的資料庫中?
對於第乙個問題的目前處理辦法是 用jsonobject的方式處理,xml轉成json再處理,統一用jsonobject來處理
對於第二個問題的處理辦法是用乙個配置方案,指定json的各個屬性對應表的哪個column上,例如對於原始json a,
我們的配置為,意思是說把結果中的a屬性對應的值1放進表的colunm1上,把屬性b對應的值放在column2上。
但是很多情況下,json資料不是簡單的一維的,沒有jsonarray的json可以根據屬性路徑能找到唯一的乙個值,但是在有jsonarray的json中無法通過路徑找到jsonarray中的具體的乙個,所以現在的問題是把有jsonarray的json轉成一維的jsonobject的list
原始json ,]}
解析後的結果是
[,],然後在遍歷該list中的每乙個一維的jsonobject,根據配置資訊儲存到資料庫中
1 核心方法,就是把指定的key拿出來,再從父層刪除key對應的值,值再和父層合併。
//另外一種方案,就是結果資料轉成一維**形式// 最終方法呼叫public static listaction(jsonobject jsonobject, string detailkey) else else }}
}
string json = ",\"a\":1,\"b\":[,,]},,]}]},\"m\":\"ok\"}";原始jsonjsonobject jsonobject = jsonobject.fromobject(json);
string detail = "r.r_b.r_b_d";// 指定已知的發散點
string p = detail.split("\\.");
listb = new arraylist<>();
fun(jsonobject,0,p.length,p,b);
system.out.println(b);
,"a":1,"b":[,,]},,]}]},"m":"ok"}
處理結果
,"r_a":1,"r_b_c":2,"r_b_d_e":4,"r_b_d_f":5,"r_b_d_a":"aa1"},
,"r_a":1,"r_b_c":2,"r_b_d_e":6,"r_b_d_f":7,"r_b_d_a":"aa12"},
,"r_a":1,"r_b_c":2,"r_b_d_e":66,"r_b_d_f":76,"r_b_d_a":"aa13"},
,"r_a":1,"r_b_c":3,"r_b_d_e":8,"r_b_d_f":9,"r_b_d_a":"aa14"},
,"r_a":1,"r_b_c":3,"r_b_d_e":10,"r_b_d_f":11,"r_b_d_a":"aa15"}
多維陣列轉一維陣列
二維陣列轉一維陣列 利用es6擴充套件運算子 var arr 1,2,3,4 5,6,7 console.log concat arr 結果 1,2,3,4,5,6,7 var arr 1,2,3,4 5,6,7 多維陣列轉一維陣列 使用es6新增的flat 和 flatmap方法 新增時間 201...
JS多維陣列轉一維陣列
const arr 1 2 3 4 5,6 function flat array else return flata console.log flat arr 1,2,3,4,5,6 const arr 1 2 3 4 5,6 function flat a else const flatarr ...
js中多維陣列轉一維
法一 使用陣列map 方法,對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列。let arr 1,2,3,4 5 6 function onedimensionalarray arr return arr2 console.log onedimensionalarray arr let...