解析多次元回転一次元JSON
4761 ワード
現在、プロジェクトで問題が発生しているのは、サードパーティのインタフェースデータをローカルデータベースに保存する必要があるが、サードパーティのインタフェースが返すデータフォーマットが確定していないことです.どうすればいいですか?
次の2つの問題があります.サードパーティインタフェースから返されるデータはJSON、XML(その他のフォーマットは認められません)フォーマットですが、プログラムを再開発しないでどのように適合しますか? 受信したデータをどのように包装すれば、私たちのデータベースに保存できますか?
第一の問題に対する現在の処理方法はJSONObjectで処理し,xmlをjsonに変換して再処理し,統一的にjsonobjectで処理する.
2番目の問題に対する処理方法は、jsonの各属性がテーブルのどのcolumnに対応するかを指定する構成スキームであり、例えば元のjson A{"a":"1","b":"2"}について、
我々の構成は{"colunm 1":"a","colunm 2":"b"}であり,結果のa属性に対応する値1をテーブルのcolunm 1に格納し,属性bに対応する値をcolumn 2に格納することを意味する.
しかし、多くの場合、jsonデータは単純な1次元ではなく、jsonArrayのないjsonは属性経路によって一意の値を見つけることができるが、jsonArrayのあるjsonでは経路によってjsonArrayの具体的な1つを見つけることができないため、現在の問題はjsonArrayのあるjsonを1次元のjsonObjectのlistに変換することである
元のjson{「a」:1,「b」:[{「e」:4,「f」:5},{「e」:6,「f」:7}}
解析した結果は
[{「a」:1,「e」:4,「f」:5},{「a」:1,「e」:6,「f」:7}]を巡回し、リスト内の各次元のjsonObjectを巡り、構成情報に基づいてデータベースに保存する
1コアメソッドは、指定したキーを取り出し、親からキーに対応する値を削除し、値を親にマージすることです.
次の2つの問題があります.
第一の問題に対する現在の処理方法はJSONObjectで処理し,xmlをjsonに変換して再処理し,統一的にjsonobjectで処理する.
2番目の問題に対する処理方法は、jsonの各属性がテーブルのどのcolumnに対応するかを指定する構成スキームであり、例えば元のjson A{"a":"1","b":"2"}について、
我々の構成は{"colunm 1":"a","colunm 2":"b"}であり,結果のa属性に対応する値1をテーブルのcolunm 1に格納し,属性bに対応する値をcolumn 2に格納することを意味する.
しかし、多くの場合、jsonデータは単純な1次元ではなく、jsonArrayのないjsonは属性経路によって一意の値を見つけることができるが、jsonArrayのあるjsonでは経路によってjsonArrayの具体的な1つを見つけることができないため、現在の問題はjsonArrayのあるjsonを1次元のjsonObjectのlistに変換することである
元のjson{「a」:1,「b」:[{「e」:4,「f」:5},{「e」:6,「f」:7}}
解析した結果は
[{「a」:1,「e」:4,「f」:5},{「a」:1,「e」:6,「f」:7}]を巡回し、リスト内の各次元のjsonObjectを巡り、構成情報に基づいてデータベースに保存する
1コアメソッドは、指定したキーを取り出し、親からキーに対応する値を削除し、値を親にマージすることです.
// ,
public static List action(JSONObject jsonObject, String detailKey){
Object detailObj = jsonObject.get(detailKey);
List allJSONObjectList = new ArrayList<>();
if(detailObj!=null){
JSONObject resultJsonObject,detailObjOne;
jsonObject.remove(detailKey);
if(detailObj instanceof JSONArray){
JSONArray detailArray = (JSONArray)detailObj;
for(int i=0;i
// json key
private static JSONObject action1(JSONObject jsonObject,String detailKey){
Iterator iterator = jsonObject.keys();
JSONObject object = new JSONObject();
while(iterator.hasNext()){
String key = (String) iterator.next();
object.put(detailKey+"_"+key,jsonObject.get(key));
}
return object;
}
// public static void fun(JSONObject obj,int i,int len,String [] p,List b) {
if (i >= len) {
return;
} else {
for (JSONObject jsonObject : action(obj, p[i++])) {
if (i == len - 1) {
b.addAll(action(jsonObject, p[i]));
} else {
fun(jsonObject, i,len,p, b);
}
}
}
}
// メソッド び しString json = "{\"r\":{\"A\":{\"A1\":1},\"a\":1,\"b\":[{\"c\":2,\"d\":[{\"e\":4,\"f\":5,\"A\":\"AA1\"},{\"e\":6,\"f\":7,\"A\":\"AA12\"},{\"e\":66,\"f\":76,\"A\":\"AA13\"}]},{\"c\":3,\"d\":[{\"e\":8,\"f\":9,\"A\":\"AA14\"},{\"e\":10,\"f\":11,\"A\":\"AA15\"}]}]},\"m\":\"ok\"}";
JSONObject jsonObject = JSONObject.fromObject(json);
String detail = "r.r_b.r_b_d";//
String[] p = detail.split("\\.");
List b = new ArrayList<>();
fun(jsonObject,0,p.length,p,b);
System.out.println(b);
のjson
{"r":{"A":{"A1":1},"a":1,"b":[{"c":2,"d":[{"e":4,"f":5,"A":"AA1"},{"e":6,"f":7,"A":"AA12"},{"e":66,"f":76,"A":"AA13"}]},{"c":3,"d":[{"e":8,"f":9,"A":"AA14"},{"e":10,"f":11,"A":"AA15"}]}]},"m":"ok"}
[
{"m":"ok","r_A":{"A1":1},"r_a":1,"r_b_c":2,"r_b_d_e":4,"r_b_d_f":5,"r_b_d_A":"AA1"},
{"m":"ok","r_A":{"A1":1},"r_a":1,"r_b_c":2,"r_b_d_e":6,"r_b_d_f":7,"r_b_d_A":"AA12"},
{"m":"ok","r_A":{"A1":1},"r_a":1,"r_b_c":2,"r_b_d_e":66,"r_b_d_f":76,"r_b_d_A":"AA13"},
{"m":"ok","r_A":{"A1":1},"r_a":1,"r_b_c":3,"r_b_d_e":8,"r_b_d_f":9,"r_b_d_A":"AA14"},
{"m":"ok","r_A":{"A1":1},"r_a":1,"r_b_c":3,"r_b_d_e":10,"r_b_d_f":11,"r_b_d_A":"AA15"}
]