Как преобразовать JSON в файл свойств в Java? - PullRequest
0 голосов
/ 20 января 2019

У меня есть строка JSON и я хочу преобразовать ее в файл свойств Java. Примечание: JSON может быть в виде строки, объекта или файла JSON. Образец JSON:

    {
    "simianarmy": {
        "chaos": {
            "enabled": "true",
            "leashed": "false",
            "ASG": {
                "enabled": "false",
                "probability": "6.0",
                "maxTerminationsPerDay": "10.0",
                "IS": {
                    "enabled": "true",
                    "probability": "6",
                    "maxTerminationsPerDay": "100.0"
                },
                  },
                   },
                    }

 **OUTPUT SHOULD BE:-**
simianarmy.chaos.enabled=true
simianarmy.chaos.leashed=false
simianarmy.chaos.ASG.enabled=false
simianarmy.chaos.ASG.probability=6.0
simianarmy.chaos.ASG.maxTerminationsPerDay=10.0
simianarmy.chaos.ASG.IS.enabled=true
simianarmy.chaos.ASG.IS.probability=6
simianarmy.chaos.ASG.IS.maxTerminationsPerDay=100.0

1 Ответ

0 голосов
/ 20 января 2019

Вы можете использовать JavaPropsMapper из библиотеки Джексона. Но вы должны определить иерархию объектов принимающего объекта json, прежде чем сможете использовать его, чтобы иметь возможность проанализировать строку json и построить из нее объект java.

Как только у вас есть java-объект, успешно созданный из json, вы можете преобразовать его в объект Properties, а затем сериализовать его в файл, и это создаст то, что вы хотите.

Пример json:

{ "title" : "Home Page", 
  "site"  : { 
        "host" : "localhost"
        "port" : 8080 ,
        "connection" : { 
            "type" : "TCP",
            "timeout" : 30 
        } 
    } 
}

И иерархия классов для сопоставления вышеуказанной структуры JSON:

class Endpoint {
    public String title;
    public Site site;
}

class Site {
    public String host;
    public int port; 
    public Connection connection;
}

class Connection{
    public String type;
    public int timeout;
}

Таким образом, вы можете создать из него объект java Endpoint и преобразовать его в объект Properties, а затем сериализовать в файл .properties:

public class Main {

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        String json = "{ \"title\" : \"Home Page\", "+
                         "\"site\" : { "+
                                "\"host\" : \"localhost\", "+
                                "\"port\" : 8080 , "+
                                "\"connection\" : { "+
                                    "\"type\" : \"TCP\","+
                                    "\"timeout\" : 30 "+
                                "} "+
                            "} "+
                        "}";

        ObjectMapper om = new ObjectMapper();
        Endpoint host = om.readValue(json, Endpoint.class);

        JavaPropsMapper mapper = new JavaPropsMapper();

        Properties props = mapper.writeValueAsProperties(host); 

        props.store(new FileOutputStream(new File("/path_to_file/json.properties")), "");
    }
}

После того, как вы откроете файл json.properties, вы увидите вывод:

site.connection.type = TCP

site.connection.timeout = 30

site.port = 8080

site.host = локальный

title = Домашняя страница

Идея пришла из этой статьи.

Надеюсь, это будет полезно.

...