解析多次元回転一次元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コアメソッドは、指定したキーを取り出し、親からキーに対応する値を削除し、値を親にマージすることです.
    //      ,              
    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"}
    ]