Манипулировать файлом JSON и анализировать его в объект после выполнения манипуляций в памяти - PullRequest
0 голосов
/ 16 апреля 2019

Моя главная цель - извлечь информацию из файла JSON и манипулировать ею в памяти (пытаясь решить синтаксические проблемы в памяти).После этого проанализируйте обработанное значение в объекте с помощью com.google.gson.JsonParser и оставьте старый файл таким, каким он был в начале (с учетом синтаксических ошибок).

Мне удалось манипулировать файлом с помощью RandomAccessFileи проанализируйте его позже, используя «новый FileReader».Но после прогона кода я заметил, что «старый» файл был изменен, и это не должно иметь место.Я не хочу изменять сам файл, но содержимое и анализировать его в Object с помощью 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": ""
  }
}

В основном мне нужно добавить «[» и «]» в начале / конце файла для решения проблемы синтаксиса.

1 Ответ

1 голос
/ 16 апреля 2019

JSON никак не скомпонован, просто карта типа Map<String, Objekt> a TypeToken может помочь решить вашу проблему:

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

если у вас есть fileWriter, он перезапишет данные

пример данных:

Hello world

Если вы напишите K в 0, это будет выглядеть так

Kello world

...