繁体   English   中英

字符串数组到 object 数组,字符串内有键值对

[英]String array to object array with key-value pair inside the string

我想用字符串数组中的键值对构造一个 object 数组。

字符串数组格式:

['<ISO Date> - <Log Level> - {"transactionId: "<UUID>", "details": "<message event/action description>", "err": "<Optionall, error description>"}']

object 数组格式:

[{"timestamp": <Epoch Unix Timestamp>, "loglevel": "<loglevel>", "transactionId: "<UUID>", "err": "<Error message>" }]

stringArray = [
   "2021-08-09T02:12:51.259Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\": 404,\"err\":\"Not found\"}",
   "2022-08-09T02:12:51.275Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\":404,\"err\":\"Cannot find user orders list"}"
];

objectArray = [
   {
      "timestamp":1628475171259,
      "loglevel":"error",
      "transactionId":"9abc55b2-807b-4361-9dbe-aa88b1b2e978",
      "err":"Not found"
   },
   {
      "timestamp":1660011171275,
      "loglevel":"error",
      "transactionId":"9abc55b2-807b-4361-9dbe-aa88b1b2e97",
      "err":"Cannot find user orders list"
   }
];

您可以将每一行解构为"timestamp" - "logLevel" - "jsonStringified"

后者可以是JSON.parse d 来检索 object

请注意,也许您应该确保每一行都包含格式。 否则你会有错误需要处理(如果没有jsonStringified,其他人输出了一些随机行,等等)

 stringArray = [ "2021-08-09T02:12:51.259Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\": 404,\"err\":\"Not found\"}", "2022-08-09T02:12:51.275Z - error - {\"transactionId\":\"9abc55b2-807b-4361-9dbe-aa88b1b2e978\",\"details\":\"Cannot find user orders list\",\"code\":404,\"err\":\"Cannot find user orders list\"}" ]; const tsCapture = '(.{'+"2022-08-09T02:12:51.275Z".length+'})' const levelCapture = '(error|warning|debug)' const stringCapture = '(.+)' const reg = new RegExp('^'+tsCapture + ' - ' + (levelCapture) + ' - ' + stringCapture+'$') const parsed = stringArray.map(line => { const [_, timestamp, logLevel, str] = line.match(reg) return {timestamp, logLevel, ...JSON.parse(str)} }) console.log({ parsed })

在 Java 中,您可以通过使用令牌拆分来做到这一点

JSONArray jsonArray = new JSONArray();
        for(int i=0;i<stringArray.length; i++) {
            String string = stringArray[i];
            String[] stringSplit = string.split(" - ");
            JSONObject object = new JSONObject();
            object.put("timestamp", stringSplit[0]);
            object.put("loglevel", stringSplit[1]);
            String[] transtactionDetailSplit = stringSplit[2].split(":|,");
            object.put("transactionId", transtactionDetailSplit[1]);
            object.put("err", transtactionDetailSplit[7]);
            jsonArray.add(object);
        }
        System.out.println(jsonArray);

请在需要的地方添加 null 检查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM