如何从java.util.Properties对象创建分层JSON
我正在寻找从普通java.util.Properties对象创建分层JSON的好方法或完整API 存在java.util.Properties对象,例如:如何从java.util.Properties对象创建分层JSON,java,json,properties,Java,Json,Properties,我正在寻找从普通java.util.Properties对象创建分层JSON的好方法或完整API 存在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":1
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
}
}
}
您需要将属性解析为
映射
,其中您的对象将是另一个映射
或一个字符串
。为此,您必须编写自己的代码。我想您需要使用方法String.split()获取属性键并将它们拆分到“.”上。请注意,在代码中需要使用“\\”作为参数,因为“.”是正则表达式。构建映射后,使用Jackson库或任何可用的JSON库很容易将其转换为JSON。public void run()抛出IOException{
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;
}
属性=。。。;
Map Map=newtreemap();
for(对象键:properties.keySet()){
List keyList=Arrays.asList(((字符串)键).split(“\\”);
Map valueMap=createTree(键列表,映射);
字符串值=properties.getProperty((字符串)键);
value=StringEscapeUtils.unescapeHtml(值);
valueMap.put(keyList.get(keyList.size()-1),value);
}
Gson Gson=new GsonBuilder().setPrettyPrinting().create();
字符串json=gson.toJson(map);
System.out.println(“就绪,转换”+properties.size()+“条目”);
}
@抑制警告(“未选中”)
私有映射createTree(列表键、映射映射){
Map valueMap=(Map)Map.get(key.get(0));
if(valueMap==null){
valueMap=newhashmap();
}
map.put(key.get(0),valueMap);
Map out=valueMap;
如果(key.size()>2){
out=createTree(keys.subList(1,keys.size()),valueMap);
}
返回;
}
以下项目“”正好满足您的需求
但是,它对Java8有一个限制
如果有人真的提供更改使其与Java 7兼容,那就太好了。目前该项目支持Java 7。