2017-10-13 48 views
-1

我正在使用Java,並且有兩個列表,一個具有字段名稱,另一個具有值。我正在使用列表值生成JSON,它工作正常,如下所示。使用Java的兩個單獨列表生成JSON輸出

String json = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping(). 
         create().toJson(fieldValues); 
       fileOut.println(json); 

重複字段值來這樣的:

[ 
    "2017-10-02T21:06:08.134061801Z", 
    "sensor_2000:, 
    "10", 
    1.0 
    ], 
    [ 
    "2017-10-02T21:06:08.134061801Z", 
    "sensor_1000:, 
    "20", 
    2.0 
    ], 

現在我有具有在它的字段名,其具有內容的另一小的常數字段列表如下所示:

[ 
    "time", 
    "sensor", 
    "sequence_number", 
    "component_id" 
] 

我怎樣才能合併列名列表與第一個列表有價值,並得到這樣的:

[ 
     "time":"2017-10-02T21:06:08.134061801Z", 
     "sensor":"sensor_2000:, 
     "sequence_number":"10", 
     "component_id":1.0 
     ], 
     [ 
     "time":"2017-10-02T21:06:08.134061801Z", 
     "sensor":"sensor_1000:, 
     "sequence_number":"20", 
     "component_id":2.0 
     ], 

回答

1

如果我理解正確,你有2個列表:一個是值,另一個是名字。

值:

[["2017-10-02T21:06:08.134061801Z","sensor_2000:",10,1.0],["2017-10-02T21:06:08.134061801Z","sensor_1000:",20,2.0]] 

名稱:

[time, sensor, sequence_number, component_id] 

可以爲了實現自己的目標使用的JSONObject。特別the addProperty method

這裏是它的示例:

 Gson gson= new Gson(); 
     List<Object> finalValue= new LinkedList<>(); 
     List<Object> value= new LinkedList<>(); 
     List<Object> value2= new LinkedList<>(); 
     List<String> names= new LinkedList<>(); 

     value.add("2017-10-02T21:06:08.134061801Z"); 
     value.add("sensor_2000:"); 
     value.add(10); 
     value.add(1.0); 

     value2.add("2017-10-02T21:06:08.134061801Z"); 
     value2.add("sensor_1000:"); 
     value2.add(20); 
     value2.add(2.0); 

     finalValue.add(value); 
     finalValue.add(value2); 

     names.add("time"); 
     names.add("sensor"); 
     names.add("sequence_number"); 
     names.add("component_id"); 

     System.out.println("values: " + gson.toJson(finalValue)); 
     System.out.println("names: " + names); 


     LinkedList<JsonObject> finalList= new LinkedList<>(); 

     for(Object obj: finalValue) 
     { 
      JsonObject jsonObj= new JsonObject(); 
      List<Object> valueObj = (List<Object>) obj; 
      int i=0; 
      for(Object innerObj: valueObj) 
      { 
       if(names.get(i).equalsIgnoreCase("component_id")) 
       { 
        jsonObj.addProperty(names.get(i), Double.parseDouble(String.valueOf(innerObj))) ; 
       } 
       else if(names.get(i).equalsIgnoreCase("sequence_number")) 
       { 
       jsonObj.addProperty(names.get(i), Integer.parseInt(String.valueOf(innerObj))) ; 
       } 
       else { 
        jsonObj.addProperty(names.get(i), String.valueOf(innerObj)) ; 
       } 
       i++; 
      } 

      finalList.add(jsonObj); 
     } 

     System.out.println(gson.toJson(finalList)); 

    }