所以我有一个点分隔的字符串,我试图将其转换为JAVA中的JSON对象。结构如下。
Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc. Person.City.firstNm.Salary=1000.24, Person.State.FirstNm.LastNm=xyz
等等。生成的JSON应该是这样的。请注意,值中可以有一个小数点。
{
Person:
{
City:
{
firstNm:
{
LastNm:xyz,
Salary:1000.24
},
Address: abc
},
State:
{
FirstNm:
{
LastNm:xyz
}
}
}
}
我试图从字符串中制作一个Map,然后用它来制作一个JSON字符串,我可以用它来作为对象,但是没有运气。任何帮助,将不胜感激。谢谢
您需要构建用于存储对象的树状结构。比,仅toString()
此而已。以下是我如何看待您的方法:
public class TestJson {
static abstract class Node {
}
static class IntermediateNode extends Node {
public Map<String, Node> keyValueMap = new LinkedHashMap<>();
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
sb.append(keyValueMap.entrySet().stream().map(entry -> entry.getKey() + " : " + entry.getValue())
.collect(Collectors.joining(", ")));
sb.append("}");
return sb.toString();
}
}
static class LeafNode extends Node {
public String value;
@Override
public String toString() {
return value;
}
}
public static void main(String[] args) {
String testString =
"Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc, Person.City.FirstNm.Salary=1000.24, Person"
+ ".State.FirstNm.LastNm=xyz";
IntermediateNode root = new IntermediateNode();
for (String param : testString.replaceAll(" ", "").split(",")) {
String[] def = param.split("=");
String[] result = def[0].split("\\.");
IntermediateNode currentNode = root;
for (int i = 0; i < result.length - 1; i++) {
Node node = currentNode.keyValueMap.get(result[i]);
if (node == null) {
IntermediateNode child = new IntermediateNode();
currentNode.keyValueMap.put(result[i].trim(), child);
currentNode = child;
} else {
currentNode = (IntermediateNode) node;
}
}
LeafNode leaf = new LeafNode();
leaf.value = def[1];
currentNode.keyValueMap.put(result[result.length - 1], leaf);
}
System.out.println(root);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句