2017-10-13 3 views
-1

J'utilise Java et j'ai deux listes, l'une contient des noms de champs et d'autres ont des valeurs. Je génère un JSON en utilisant des valeurs de liste et cela fonctionne bien comme indiqué ci-dessous.Génération de sortie JSON à l'aide de deux listes séparées avec Java

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

valeurs de champ répétitifs viennent comme ceci:

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

Maintenant, j'ai une autre petite liste de champ constant ayant des noms de champs en elle, qui ont des teneurs comme indiqué ci-dessous:

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

Comment puis-je fusionner la liste des noms de colonnes avec la première liste ayant des valeurs, et obtenir la sortie comme ceci:

[ 
     "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 
     ], 

Répondre

1

Si j'ai bien compris, vous avez 2 listes: une avec les valeurs et l'autre avec les noms.

Valeurs:

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

Noms:

[time, sensor, sequence_number, component_id] 

Vous pouvez utiliser le JsonObject afin d'atteindre votre objectif. En particulier the addProperty method

est-il ici l'exemple:

 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)); 

    }