JAVA:以JSON格式保存数据

时间:2015-10-02 10:08:37

标签: java json

当您在JSONObject中添加数据时,它将以自己的方式存储。 以下是我要传达的例子。

JSONObject obj = new JSONObject();

obj.put("metricname", "splunk-ui");
obj.put("timestamp", 1234567890);
obj.put("value",34);


System.out.println(obj);

以上代码段会给出以下输出。

{
    "metricname": "splunk-ui",
    "value": 34,
    "timestamp": 1234567890
}

以下是问题: -

我按以下顺序添加数据: - metricnametimestampvalue

这是显示顺序: - metricnamevaluetimestamp

那么,我如何在JSONObject ??

中强制执行数据添加序列

仅供参考: - 这样做是可以接受的,因为我会将此JSON对象传递给另一个可以仅扫描metricnametimestampvalue中的数据的API

在这里,我发布了解决这个问题的代码片段: -

我使用了GSON库和此链接来使这段代码正常工作。 GSON Documention

JsonObject jsonObject = new JsonObject();

jsonObject.addProperty("metric", "mihirmonani");
jsonObject.addProperty("timestamp", 1346846400);
jsonObject.addProperty("value", 14);

JsonArray jArray = new JsonArray();

JsonObject jObject = new JsonObject();

jObject.addProperty("host", "splunk");
jObject.addProperty("host1", "splunk1");

jsonObject.add("tags",jObject);

System.out.println(jsonObject);

2 个答案:

答案 0 :(得分:0)

您无法使用JSONObject保持订单的唯一方法是使用JSONArray

    [
      {"name" : "metricname", "value" : "splunk-ui"},
      {"name" : "value", "value" : 34},
      {"name" : "timestamp", "value" : 1234567890}
    ]

答案 1 :(得分:0)

简短回答:你不能。 JSONObject在内部使用HashMap,它会根据哈希码的顺序返回值。

您可以使用JSONWriter显式写入值。

编辑:为了澄清,正如Manu指出的那样,在将值放入JSONObject之后,您无法检索订单。我的建议是不要将值放在JSONObject开头,而是使用JSONWriter直接写入值。