操作JSON文件并在操作完成后将其解析为Object - 在内存中

问题描述 投票:0回答:1

我的主要目标是从JSON文件中获取信息并在内存中操作它(尝试解决内存中的语法问题)。然后,使用com.google.gson.JsonParser将操纵的值解析为Object,并将旧文件保留为开头(包含语法错误)。

我设法用RandomAccessFile操作文件,然后在使用“new FileReader”时解析它。但是在运行代码后,我注意到“旧”文件已被修改,但情况并非如此。我不想更改文件本身,而是将内容解析为带有JsonParser的对象或任何可用的Parser。

import com.google.gson.JsonArray;
import com.google.gson.JsonParser;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;

public class JsonLoggingParser {


    public static final void main(String[] args) {
        String path = "C:\\CEC\\Dev\\logs\\BIMBO\\2019-04-12asdf.json";

        parseJsonLogFile(path);
    }



    public static void parseJsonLogFile(String filePath){
        try {

            File f = new File(filePath);


            RandomAccessFile randomAccessFile = new RandomAccessFile(f, "rw");

            randomAccessFile.seek(0);
            randomAccessFile.write("[{".getBytes());
            randomAccessFile.seek(f.length());
            randomAccessFile.write("]".getBytes());
            randomAccessFile.close();

            JsonParser jsonParser = new JsonParser();

            Object object = jsonParser.parse(new FileReader(f));

            JsonArray jsonArray = (JsonArray)object;


            System.out.println(jsonArray.toString());

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这就是我的JSON文件的样子:

{
  "788ad1bc-e9c8-4be5-b5b6-26ba011dc40e-request": {
    "date": "2019-04-15 10:28:58.943",
    "url": "/BIMBO/credit",
    "handleType": "request",
    "status": "200",
    "request": "Hello There",
    "response": "",
    "performanceDuration": "",
    "principalID": "123456789"
  }
},{
  "788ad1bc-e9c8-4be5-b5b6-26ba011dc40e-response": {
    "date": "2019-04-15 10:28:59.125",
    "url": "/BIMBO/credit",
    "handleType": "response",
    "status": "422",
    "request": "",
    "response": "Hello Back",
    "performanceDuration": "218.696979ms",
    "principalID": ""
  }
}

基本上我需要在文件的开头/结尾添加“[”和“]”来解决语法问题。

java json file parsing randomaccessfile
1个回答
1
投票

json没有以任何方式融合,它只是像Map<String, Objekt>TypeToken这样的地图可能有助于解决你的问题:

gson.fromJson(reader, new TypeToken<HashMap<String, class>>() {}.getType());

如果你有一个fileWriter,它将覆盖数据

示例数据:

你好,世界

如果你将K写为0,它将如下所示

时钟世界

© www.soinside.com 2019 - 2024. All rights reserved.