Вы можете использовать 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 = Домашняя страница
Идея пришла из этой статьи.
Надеюсь, это будет полезно.