Java从转换键值对创建json



我有一个键值对排序列表,如下所示:

administration.edit.error.type1 = val1
administration.edit.error.type2 = val2
administration.edit.success.type1 = val3
administration.label.button.close = val4
administration.label.button.edit = val5
home.label.button.open = val6
我想把这个列表转换成
{
"administration": {
"edit": {
"error": {
"type1": val1,
"type2": val2,
},
"success": {
"type1": val3
}
},
"label": {
"button": {
"close": val4,
"edit": val5,
}
}
},
"home": {
"label": {
"button": {
"open": val6
}
}
}
}

提供的输入列表是未知的,以及由点连接的级别
我的方法是递归地,遍历列表并使用Jackson映射器创建JsonNodes。有没有更有效的方法?也许有一个图书馆已经可以做到这一点了?

JavaPropsMapper, from jackson-data - format-properties完成这项工作

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.javaprop.JavaPropsMapper;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;
public class Application {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("/tmp/test.properties");
Properties properties = new Properties();
properties.load(fr);
HashMap map = new JavaPropsMapper().readPropertiesAs(properties, HashMap.class);
System.out.println(map);
String json = new ObjectMapper().writeValueAsString(map);
System.out.println(json);
}
}

示例文件的输出:

{administration={edit={error={type2=val2, type1=val1}, success={type1=val3}}, label={button={close=val4, edit=val5}}}, home={label={button={open=val6}}}}
{"administration":{"edit":{"error":{"type2":"val2","type1":"val1"},"success":{"type1":"val3"}},"label":{"button":{"close":"val4","edit":"val5"}}},"home":{"label":{"button":{"open":"val6"}}}}

示例使用这些依赖项:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-properties</artifactId>
<version>2.11.1</version>
</dependency>

最新更新