我正在使用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
],
答案 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));
}