2016-07-22 8 views
0

入れ子になったJSONをserver.Butに投稿したいのですが、下のヘッダとネストされたJSONで郵便配達員に成功しました。JSOUPを使用して入れ子になったJSONを投稿中にエラーが発生しました

header("Content-Type", "application/json") 
header("Accept", "application/json") 

JSON

{ 
    "mdx": "", 
    "metadata": {}, 
    "plugins": {}, 
    "name": "earth", 
    "cube": { 
     "schema": "Global Earthquakes", 
     "uniqueName": "[earthquakes].[Global Earthquakes].[Global Earthquakes].[Earthquakes]", 
     "visible": false, 
     "catalog": "Global Earthquakes", 
     "name": "Earthquakes", 
     "connection": "earthquakes" 
    }, 
    "queryModel": { 
     "calculatedMembers": [], 
     "calculatedMeasures": [], 
     "lowestLevelsOnly": false, 
     "axes": { 
      "FILTER": { 
       "aggregators": [], 
       "hierarchies": [], 
       "nonEmpty": true, 
       "location": "FILTER", 
       "filters": [] 
      }, 
      "COLUMNS": { 
       "aggregators": [], 
       "hierarchies": [], 
       "nonEmpty": true, 
       "location": "COLUMNS", 
       "filters": [] 
      }, 
      "ROWS": { 
       "aggregators": [], 
       "hierarchies": [ 
        { 
         "cmembers": {}, 
         "name": "[Date].[Time]", 
         "levels": { 
          "Year": { 
           "name": "Year" 
          } 
         } 
        } 
       ], 
       "nonEmpty": true, 
       "location": "ROWS", 
       "filters": [] 
      } 
     }, 
     "details": { 
      "measures": [ 
       { 
        "name": "Average Magnitude", 
        "type": "EXACT" 
       } 
      ], 
      "location": "BOTTOM", 
      "axis": "COLUMNS" 
     }, 
     "visualTotals": false 
    }, 
    "type": "QUERYMODEL", 
    "parameters": {}, 
    "properties": { 
     "saiku.olap.query.nonempty": true, 
     "saiku.olap.query.nonempty.rows": true, 
     "org.saiku.query.explain": true, 
     "saiku.olap.query.drillthrough": true, 
     "saiku.olap.query.nonempty.columns": true, 
     "saiku.olap.result.formatter": "flattened", 
     "saiku.ui.render.mode": "table", 
     "saiku.olap.query.automatic_execution": true, 
     "saiku.olap.query.filter": true, 
     "org.saiku.connection.scenario": false 
    }, 
    "queryType": "OLAP" 
} 

そして、ここに私のコードは

ある
// nested JSON 
    JSONObject object = new JSONObject(); 
    JSONObject querymodel = new JSONObject(); 
    JSONObject cube = new JSONObject(); 
    JSONObject parameters = new JSONObject(); 
    JSONObject plugin = new JSONObject(); 
    JSONObject properties = new JSONObject(); 
    JSONObject metadata = new JSONObject(); 
    JSONObject axes = new JSONObject(); 
    JSONObject details = new JSONObject(); 
    JSONObject columns = new JSONObject(); 
    JSONObject filter = new JSONObject(); 
    JSONObject rows = new JSONObject(); 
    JSONObject measures = new JSONObject(); 
    JSONObject o = new JSONObject(); 
    JSONObject hierarchies = new JSONObject(); 
    JSONObject o2 = new JSONObject(); 
    JSONObject levels = new JSONObject(); 
    JSONObject Year = new JSONObject(); 
    JSONObject cmembers = new JSONObject(); 

    cube.put("caption", null); 
    cube.put("catalog", "Global Earthquakes"); 
    cube.put("connection", "earthquakes"); 
    cube.put("name", "Earthquakes"); 
    cube.put("schema", "Global Earthquakes"); 
    cube.put("uniqueName", 
      "[earthquakes].[Global Earthquakes].[Global Earthquakes].[Earthquakes]"); 
    cube.put("visible", Boolean.FALSE); 

    properties.put("org.saiku.connection.scenario", Boolean.FALSE); 
    properties.put("org.saiku.query.explain", Boolean.TRUE); 
    properties.put("saiku.olap.query.automatic_execution", Boolean.TRUE); 
    properties.put("saiku.olap.query.drillthrough", Boolean.TRUE); 
    properties.put("saiku.olap.query.filter", Boolean.TRUE); 
    properties.put("saiku.olap.query.nonempty", Boolean.TRUE); 
    properties.put("saiku.olap.query.nonempty.columns", Boolean.TRUE); 
    properties.put("saiku.olap.query.nonempty.rows", Boolean.TRUE); 
    properties.put("saiku.olap.result.formatter", "flattened"); 
    properties.put("saiku.ui.render.mode", "table"); 


    List<String> a = new ArrayList<String>(); 
    List<String> ab = new ArrayList<String>(); 

    querymodel.put("axes", axes); 
    querymodel.put("calculatedMeasures", a); 
    querymodel.put("calculatedMembers", ab); 
    querymodel.put("details", details); 
    querymodel.put("lowestLevelsOnly", Boolean.FALSE); 
    querymodel.put("visualTotals", Boolean.FALSE); 
    querymodel.put("visualTotalsPattern", null); 

    axes.put("COLUMNS", columns); 
    axes.put("FILTER", filter); 
    axes.put("ROWS", rows); 

    List<Object> oa = new ArrayList<Object>(); 
    oa.add(o); 
    o.put("name", "Average Magnitude"); 
    o.put("type", "EXACT"); 

    details.put("axis", "COLUMNS"); 
    details.put("location", "BOTTOM"); 
    details.put("measures", oa); 

    List<String> b = new ArrayList<String>(); 
    List<String> bb = new ArrayList<String>(); 
    List<String> bc = new ArrayList<String>(); 

    columns.put("aggregators", b); 
    columns.put("filters", bb); 
    columns.put("hierarchies", bc); 
    columns.put("hierarchizeMode", null); 
    columns.put("location", "COLUMNS"); 
    columns.put("mdx", null); 
    columns.put("nonEmpty", Boolean.TRUE); 
    columns.put("sortEvaluationLiteral", null); 
    columns.put("sortOrder", null); 

    List<String> c = new ArrayList<String>(); 
    List<String> cb = new ArrayList<String>(); 
    List<String> cc = new ArrayList<String>(); 

    filter.put("aggregators", c); 
    filter.put("filters", cb); 
    filter.put("hierarchies", cc); 
    filter.put("hierarchizeMode", null); 
    filter.put("location", "FILTER"); 
    filter.put("mdx", null); 
    filter.put("nonEmpty", Boolean.TRUE); 
    filter.put("sortEvaluationLiteral", null); 
    filter.put("sortOrder", null); 

    List<String> d = new ArrayList<String>(); 
    List<String> db = new ArrayList<String>(); 
    List<Object> o2a = new ArrayList<Object>(); 
    o2a.add(o2); 
    o2.put("cmembers", cmembers); 
    o2.put("levels", levels); 
    o2.put("name", "[Date].[Time]"); 

    rows.put("aggregators", d); 
    rows.put("filters", db); 
    rows.put("hierarchies", o2a); 
    rows.put("hierarchizeMode", null); 
    rows.put("location", "ROWS"); 
    rows.put("mdx", null); 
    rows.put("nonEmpty", Boolean.TRUE); 
    rows.put("sortEvaluationLiteral", null); 
    rows.put("sortOrder", null); 

    //hierarchies.put("0", o2a); 

    levels.put("Year", Year); 

    Year.put("name", "Year"); 


    String abcd ="SELECT\r\nFROM [Earthquakes]"; 

    object.put("cube", cube); 
    object.put("mdx",""); 
    object.put("metadata", metadata); 
    object.put("name", "earth"); 
    object.put("parameters", parameters); 
    object.put("plugins", plugin); 
    object.put("properties", properties); 
    object.put("queryModel", querymodel); 
    object.put("queryType", "OLAP"); 
    object.put("type", "QUERYMODEL"); 

    HashMap<String, Object> objectH = new HashMap<String, Object>(); 
    objectH.put("cube", cube); 
    objectH.put("mdx",""); 
    objectH.put("metadata", metadata); 
    objectH.put("name", "earth"); 
    objectH.put("parameters", parameters); 
    objectH.put("plugins", plugin); 
    objectH.put("properties", properties); 
    objectH.put("queryModel", querymodel); 
    objectH.put("queryType", "OLAP"); 
    objectH.put("type", "QUERYMODEL"); 

    /* List<KeyVal> list = new ArrayList<KeyVal>(); 
    list.add(KeyVal.create("cube", cube.toString()));*/ 

    Gson gson = new Gson(); 
    String json = gson.toJson(objectH); 

    System.out.println("json string++++++++++"+json); 

    String obj[]; 
    obj = new String[]{json}; 
    System.out.println("string array++++++"+obj); 



    //System.out.println("++++++++++++++++++++++++++++"+object.toString()); 


    Response execute = Jsoup 
      .connect(
        "http://localhost:8000/saiku/rest/saiku/api/query/execute/") 
      .header("Content-Type", "application/json") 
      .header("Accept", "application/json") 
      .requestBody(objectH.toString()) 
      .data(new String[]{json})    //here i got error 
      .ignoreContentType(true) 
      .referrer("http://localhost:8000/") 
      .cookie("JSESSIONID", res.cookie("JSESSIONID")) 
      .userAgent(
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36") 
      .method(Method.POST).timeout(10000).execute(); 
    System.out.println("post successfully....." 
      + object.toString()); 

私はこのコードを実行する場合、私は、クエリを指定することができますdata

Errorjava.lang.IllegalArgumentException: Must supply an even number of key value pairs 
+0

エラーメッセージは、発生した行も示します。 – Henry

+0

はい私は知っていますが、私たちがデータに渡すもの(オブジェクトまたは文字列または文字列配列など)を知らない... –

+2

@Henryは何を指摘したかったのですか:もし問題のある行を知っていれば、 – Bobby

答えて

0

としてエラーを得た意味パラメーター。文字列の数は偶数でなければならず、キー値のペアとして解釈されます。

あなたの呼び出しにはクエリパラメータは必要ないと思うので、完全に省略することができます。

関連する問題