Файл свойств для сложной строки JSON [Java / Spring] - PullRequest
0 голосов
/ 07 октября 2019

Я создаю приложение Spring на бэкэнде, и моя главная цель - управлять свойствами (добавлять / обновлять / удалять) в файле *.properties. Я хочу преобразовать этот файл в JSON, а затем манипулировать им из приложения пользовательского интерфейса.

Есть ли возможность преобразовать структуру следующим образом:

a.x=1
a.y=2
b.z=3

В JSON следующим образом:

{
    "a": {
        "x": 1,
        "y": 2
    },
    "b": {
        "z": 3
    }
}

Я нашел решение использовать библиотеку GSON, но это создаетдля меня плоская структура, а не иерархическая, код, который я использовал:

Properties props = new Properties();
try (FileInputStream in = new FileInputStream(classPathResource.getFile())) {
    props.load(in);
}
String json = new GsonBuilder().enableComplexMapKeySerialization().create().toJson(props);

Здесь кто-то, кто сталкивался с той же проблемой и, возможно, нашел работающий проект для этого? Может быть, библиотека GSON сможет это сделать?

1 Ответ

1 голос
/ 07 октября 2019

Это решение требует много работы, но вы получите то, чего хотите достичь, с помощью приведенного ниже кода, в основном идея состоит в том, чтобы разделить ключ на основе одной точки, а затем создать JsonObject, если тот же первый ключнайдено.

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Properties;

import org.json.JSONObject;

import com.fasterxml.jackson.annotation.JsonIgnore;

public class SOTest {
    public static void main(String[] args) throws IOException {
        JSONObject jsonObject = new JSONObject();
        FileReader fileReader = new FileReader(new File("C:\\Usrc\\main\\java\\Sample.properties"));
        Properties properties = new Properties();
        properties.load(fileReader);
        Iterator<Entry<Object, Object>> iterator = properties.entrySet().iterator();
        while (iterator.hasNext()) {
            Entry<Object, Object> entry =  iterator.next();
            String value = (String) entry.getKey();
            String[] values = value.split("\\.");

            JSONObject opt = jsonObject.optJSONObject(values[0]);
            if(opt!=null) {
                opt.put(values[1],entry.getValue());
            }else {
                JSONObject object = new JSONObject();
                object.put(values[1], entry.getValue());
                jsonObject.put(values[0], object);
            }       
        }

        System.out.println(jsonObject.toString());  
    }
}

Выход

{"a":{"x":"1","y":"3"},"b":{"z":"10"}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...