2016-03-06 30 views
3

我正在寻找好的方法或完整的API来从普通的java.util.Properties对象创建分层JSON。如何从java.util.Properties对象创建分层JSON

存在java.util.Properties对象,如:

car.color=blue 
car.places=4 
car.motor.dimension=2L 
car.motor.ps=120 

和目标JSON structur应该是:

{ 
"car": 
    {"color":"blue", 
    "places":4, 
    "motor": 
    {"dimension":"2L", 
    "ps":120 
    } 
    } 
} 

回答

2
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

你需要分析你的属性来Map<String, Object>您的对象将被另一个是Map<String, Object>String。为此,您将不得不编写自己的代码。我想你会需要把你的属性键和分裂“。”使用方法String.split()。请注意,在您的代码中,您需要使用“\\”。作为“。”的参数。是一个正则表达式。一旦你建立你的地图,它很容易使用杰克逊库或任何可用的JSON库将其转换为JSON。

2

以下项目'Java Properties to JSON'完全达到您的要求。

然而,对Java的8限制

将是巨大的,如果有人确实提供了改变,使其Java 7的兼容。

+0

现在该项目支持Java 7。 –