Java 将点分隔字符串转换为JSON对象

Java 将点分隔字符串转换为JSON对象,java,json,Java,Json,所以我有一个点分隔的字符串,我试图在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: {

所以我有一个点分隔的字符串,我试图在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
            }
        }
    }
}

我试着用这个字符串制作一个映射,然后用它来制作一个JSON字符串,我可以用它来制作一个对象,但是运气不好。任何帮助都将不胜感激。谢谢

您需要构建树状结构来存储对象。然后,只需
toString()
it。以下是我认为您可以做到的:

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);
    }
}
公共类TestJson{
静态抽象类节点{
}
静态类中间节点扩展节点{
public Map keyValueMap=新建LinkedHashMap();
@凌驾
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
某人附加(“{”);
sb.append(keyValueMap.entrySet().stream().map(entry->entry.getKey()+”:“+entry.getValue())
.collect(收集器。连接(“,”);
某人附加(“}”);
使某人返回字符串();
}
}
静态类LeafNode扩展节点{
公共字符串值;
@凌驾
公共字符串toString(){
返回值;
}
}
公共静态void main(字符串[]args){
字符串测试字符串=
Person.City.FirstNm.LastNm=xyz,Person.City.Address=abc,Person.City.FirstNm.Salary=1000.24,Person
+“.State.FirstNm.LastNm=xyz”;
中间节点根=新中间节点();
for(字符串参数:testString.replaceAll(“,”).split(“,”){
字符串[]def=param.split(“”);
字符串[]结果=定义[0]。拆分(\\);
中间节点currentNode=根节点;
for(int i=0;i
请上传有问题的代码。谢谢,这样就解决了问题。是啊,我没有拿到DS。谢谢你的帮助。嘿,这对对象来说很好,但是我们如何表示数组呢?