如何从java.util.Properties对象创建分层JSON

如何从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

我正在寻找从普通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":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。