将点分隔的字符串转换为JSON对象 [英] Convert a dot seperated string into a JSON Object

查看:153
本文介绍了将点分隔的字符串转换为JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个点分隔的字符串,我试图在JAVA中转换为JSON对象。结构如下。

So i have a dot seperated string which i am trying to convert into a JSON Object in JAVA. The structure is as follows.

Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc. Person.City.firstNm.Salary=1000.24, Person.State.FirstNm.LastNm=xyz

等等上。生成的JSON应该是这样的。请注意,值中可以有小数点。

and so on. The resulting JSON should be something like this. Note there can be a decimal point in the value.

{
    Person:
    {
        City:
        {
            firstNm:
            {
                LastNm:xyz,
                        Salary:1000.24
            },
            Address: abc
        },
        State:
        {
            FirstNm:
            {
                LastNm:xyz
            }
        }
    }
}

我试图从字符串中创建一个Map然后用它来制作一个JSON字符串我可以使用它作为一个对象,但没有运气。任何帮助,将不胜感激。谢谢

I have tried to make a Map from the string and then use it to make a JSON string which i can use to make it as an Object but no luck. Any help would be appreciated. Thanks

推荐答案

您需要构建树状结构来存储对象。比,只需 toString()就可以了。以下是我看到你可以做到的事情:

You need to build tree-like structure for storing objects. Than, just toString() it. Below is how I see you can do 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);
    }
}

这篇关于将点分隔的字符串转换为JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆