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

时间:2019-04-16 07:51:27

标签: java json file parsing randomaccessfile

我的主要目标是从JSON文件中获取信息并在内存中进行操作(试图解决内存中的语法问题)。然后,使用com.google.gson.JsonParser将操纵值解析为一个对象,并保留旧文件的开头位置(包括语法错误)。

我设法使用RandomAccessFile操作该文件,然后使用“ new FileReader”对其进行解析。但是在运行完代码之后,我注意到“旧”文件已被修改,事实并非如此。我不想更改文件本身,而是更改内容,然后使用JsonParser或任何可用的解析器将其解析为一个对象。

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": ""
  }
}

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

1 个答案:

答案 0 :(得分:1)

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

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

如果您有fileWriter,它将覆盖数据

示例数据:

你好世界

如果您在0处写一个K,它将看起来像这样

凯洛世界