解析 多維轉一維JSON

2021-09-12 06:07:25 字數 1548 閱讀 4148

目前在專案中遇到乙個問題,就是需要把第三方的介面資料儲存到本地資料庫中,但是不確定第三方介面返回的資料格式,該咋辦呢?

現在有兩個問題需要處理:

第三方介面返回的資料是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\"}";

jsonobject 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);

原始json

,"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...