2017-10-13 95 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)); 

    }