使用两个单独的Java列表生成JSON输出

时间:2017-10-13 18:25:33

标签: java json gson

我正在使用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 个答案:

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

    }