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

时间:2016-03-06 18:05:12

标签: java json properties

我正在寻找好的方法或完整的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
    }
  }
}

3 个答案:

答案 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)

以下项目&#39; Java Properties to JSON&#39;实现你所寻求的目标。

但是,它对Java 8有限制。

如果有人实际提供更改以使其与Java 7兼容,那将会很棒。

答案 2 :(得分:1)

您需要将属性解析为Map<String, Object>,其中您的对象将是另一个Map<String, Object>String。为此,您必须编写自己的代码。我想你需要拿你的属性键并将它们拆分为“。”使用方法String.split()。请注意,在您的代码中,您需要使用“\\。”作为参数“。”是一个正则表达式。一旦构建了Map,就可以很容易地使用Jackson库或任何可用的JSON库将其转换为JSON。