gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:51:26 26 4
gpt4 key购买 nike

今天我开始为日志文件编写一个简单的解析器。我想获取日志文件并将其转换为简单的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com