我正在寻找好的方法或完整的API来从普通的java.util.Properties对象创建分层JSON。
存在java.util.Properties对象,例如:
car.color=blue
car.places=4
car.motor.dimension=2L
car.motor.ps=120
并且目标json结构应该是:
{
"car":
{"color":"blue",
"places":4,
"motor":
{"dimension":"2L",
"ps":120
}
}
}
答案 0 :(得分:3)
public void run() throws IOException {
Properties properties = ...;
Map<String, Object> map = new TreeMap<>();
for (Object key : properties.keySet()) {
List<String> keyList = Arrays.asList(((String) key).split("\\."));
Map<String, Object> valueMap = createTree(keyList, map);
String value = properties.getProperty((String) key);
value = StringEscapeUtils.unescapeHtml(value);
valueMap.put(keyList.get(keyList.size() - 1), value);
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(map);
System.out.println("Ready, converts " + properties.size() + " entries.");
}
@SuppressWarnings("unchecked")
private Map<String, Object> createTree(List<String> keys, Map<String, Object> map) {
Map<String, Object> valueMap = (Map<String, Object>) map.get(keys.get(0));
if (valueMap == null) {
valueMap = new HashMap<String, Object>();
}
map.put(keys.get(0), valueMap);
Map<String, Object> out = valueMap;
if (keys.size() > 2) {
out = createTree(keys.subList(1, keys.size()), valueMap);
}
return out;
}
答案 1 :(得分:2)
答案 2 :(得分:1)
您需要将属性解析为Map<String, Object>
,其中您的对象将是另一个Map<String, Object>
或String
。为此,您必须编写自己的代码。我想你需要拿你的属性键并将它们拆分为“。”使用方法String.split()。请注意,在您的代码中,您需要使用“\\。”作为参数“。”是一个正则表达式。一旦构建了Map,就可以很容易地使用Jackson库或任何可用的JSON库将其转换为JSON。