为什么不允许原始数组添加到GSON中的JSON结构

时间:2014-02-23 07:33:31

标签: java json gson

我想这样做来创建一个像下面这样的json对象。

JsonObject      request             = new JsonObject();
request.addProperty("requestid", UUID.randomUUID().toString());
request.addProperty("type", "hotel");
request.addProperty("markups", new double[]{1.0,2.0,3.0}); // This says "The method addProperty(String, String) in the type JsonObject is not applicable for the arguments (String, double[])"
request.add("markups", new double[]{1.0,2.0,3.0});// This says "The method add(String, JsonElement) in the type JsonObject is not applicable for the arguments (String, double[])"

JSON对象:

{
  "requestid": "05afcd81-9c59-4a21-a61e-ae48fda6bdd0",
  "type": "hotel",
  "markups": [1.0,2.0,3.0]
}

请注意,这不是关于,从Json和toJson的事情。它是JSON CREATION和READING对象而不是转换。 那么,我怎么能用上面的实现来做呢。

2 个答案:

答案 0 :(得分:2)

这可以使用JsonPrimitive完成,如下所示:

JsonObject      request             = new JsonObject();
request.addProperty("requestid", UUID.randomUUID().toString());
request.addProperty("type", "hotel");

JsonArray       jpArray         = new JsonArray();
jpArray.add(new JsonPrimitive(1.0));
jpArray.add(new JsonPrimitive(2.0));
jpArray.add(new JsonPrimitive(3.0));

request.add("markups", jpArray);

OutPut:

{
  "requestid": "6259f169-3a55-4a2e-b03c-5931d4daf2fd",
  "type": "hotel",
  "markups": [
    1.0,
    2.0,
    3.0
  ]
}

答案 1 :(得分:2)

由于您希望使用解析树对象来构建JSON结构,因此您需要实例化并将值添加到JsonArray对象,或者使用Gson并转换double[]。我假设你宁愿做后者:

public static void main( String[] args ) 
{
    double[] d = new double[] { 1.0, 2.0};
    JsonElement e = new Gson().toJsonTree(d);
    JsonObject o = new JsonObject();
    o.add("array", e);
    System.out.println(o);
}

输出:

  

{ “阵列”:[1.0,2.0]}

toJsonTree()方法获取Java数组并将其转换为Gson解析树JsonArray并将其作为超类JsonElement

返回