Java : JSONObject. put 循环给出了错误的顺序?

标签 java json

今天我开始为日志文件编写一个简单的解析器。我想获取日志文件并将其转换为简单的 json 结构。

日志文件是一致的,有 3 个主要部分(示例如下):

  • 时间戳[23位]
  • 代码[4位]
  • 有效负载[可变数字]

示例日志

2018-07-25T08:47:16,094,164f,test1
2018-07-25T08:47:18,163,1678,test2
2018-07-25T08:47:19,501,1662,test3
2018-07-25T08:47:21,278,1634,test4
2018-07-25T08:47:23,347,1632,test5
2018-07-25T08:47:24,686,1665,test6
2018-07-25T08:47:26,463,1678,test7
2018-07-25T08:47:28,533,1678,test8
2018-07-25T08:47:29,877,1632,test9
2018-07-25T08:47:31,687,1632,test10

由此,我想创建一个 JSON 文件,以很好地合并其中的信息。这就是我想到的(使用 org.json.JSONObject 库)。

BufferedReader reader = new BufferedReader(new FileReader ("file.log"));

String line = null;
String timestamp = null;
String eventCode = null;
String payload = null;

JSONObject codePayload = new JSONObject();
JSONObject finalString = new JSONObject();

for (int i = 0; i < 10; i++) {
    line = reader.readLine();

    timestamp = line.substring(0, 23);
    eventCode = line.substring(24, 28);
    payload = line.substring(29, line.length());

    codePayload.put("ID", eventCode);
    codePayload.put("PL", payload);
    finalString.put(timestamp, codePayload);

    codePayload = new JSONObject();
  }
  System.out.println(finalString.toString());

这个小片段应该可以很好地工作(不要介意 for),而且确实如此。它根据我给它的字符串创建 JSON 文件,但它以奇怪的顺序放置,见下文。

{
  "2018-07-25T08:47:24,686": {
    "ID": "1665",
    "PL": "test6"
  },
  "2018-07-25T08:47:29,877": {
    "ID": "1632",
    "PL": "test9"
  },
  "2018-07-25T08:47:31,687": {
    "ID": "1632",
    "PL": "test10"
  },
  "2018-07-25T08:47:16,094": {
    "ID": "164f",
    "PL": "test1"
  },
  "2018-07-25T08:47:21,278": {
    "ID": "1634",
    "PL": "test4"
  },
  "2018-07-25T08:47:18,163": {
    "ID": "1678",
    "PL": "test2"
  },
  "2018-07-25T08:47:23,347": {
    "ID": "1632",
    "PL": "test5"
  },
  "2018-07-25T08:47:28,533": {
    "ID": "1678",
    "PL": "test8"
  },
  "2018-07-25T08:47:19,501": {
    "ID": "1662",
    "PL": "test3"
  },
  "2018-07-25T08:47:26,463": {
    "ID": "1678",
    "PL": "test7"
  }
}

正如您可以清楚地看到的,它以错误的顺序放置了对象,我真的不知道为什么。如果有人对这个问题如何发生有丝毫的了解,请在下面发表评论。非常感谢!

最佳答案

org.json.JSONObject 是无序的,因此最好使用 javax.json.JSONObject 或者如果您使用 org.json 库,请使用 org.json.JSONArray 按顺序存储时间戳。

关于Java : JSONObject. put 循环给出了错误的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931528/

相关文章:

java - apply stream 过滤掉所有满足条件的元素,除了一个

java - 使用 JSSE 时应该如何进行主机名验证?

java - 控制台空间

javascript - 如何使用 jquery 发送对象的 json 列表?

java - 解析有效 JSON 时出现 Volley org.json.JSONException

jquery - 部分 View 与 Json(或两者)

javascript - Zapier中的JavaScript使用分页来循环API调用

java - 在 python 和 java 中使用 OpenCV 的不同图像

java - Android Studio 无法找到有效的 Jvm(与 MAC OS 相关)

json - 将字节数组设置为 json.RawMessage