繁体   English   中英

在Java中将任何简单的字符串转换为JSON

[英]Convert any simple string to JSON in Java

我有这样的字符串:

String metadata = "{ Item: {Owner:John, About:{website:www.john.com/about, firstName:William, lastName:Shakespeare, date:1/2/2000, books:[Othello, R&J], shelf:[12/3/4, 14/5/6, 17/8/6]}}}"

我想将此元数据转换为JSON格式。 但是由于缺少引号,所以我无法将其转换。

我可以编写一个可以解析和添加引号的代码,该代码对于将任何字符串转换为JSON都不灵活。 (由于该元数据将来可能会发生变化)。

有没有一种方法可以将引号添加到任何字符串以使其变为JSON?

或者如何将其概括化,以便将简单的字符串转换为JSON。 我们有Java转换的任何库吗?

如果没有库,代码片段将非常有助于理解。

好吧,我不想使用任何外部库。

您的字符串似乎使用花哨的不连贯符号:冒号和等号分隔键,未加引号的字符串,具有多种格式的日期...

首先是如何产生的? 更改该字符串的生成方式可能比重新解析它更容易。

要解析字符串,您必须首先确定如何将其分解的规则(语法)。 由于它本身是不连贯的,因此该解析器将不会结束特殊情况。

public static void main(String[] args){
        String metadata = "{ Item: {Owner:John, About:{website:www.john.com/about, firstName:William, lastName:Shakespeare, date:1/2/2000, books:[Othello, R&J], shelf:[12/3/4, 14/5/6, 17/8/6]}}}";
        String json = "";
        StringTokenizer st = new StringTokenizer(metadata, "([^:{}, ])", true);
        StringTokenizer stkey = new StringTokenizer(metadata, "([^:{}, ])", false);
        while(stkey.hasMoreTokens()){
            String s1 = stkey.nextToken();
            while(st.hasMoreTokens()){
                String s2 = st.nextToken();
                if(s1.equals(s2)){
                    json += "\"" + s2.trim() + "\"";
                    break;
                } else {
                    json += s2;
                }
            }
        }
        while(st.hasMoreTokens()){
            json += st.nextToken();
        }
        System.out.println(json);
        JSONObject jo = JSONObject.fromObject(json);
    }

只能将每个值视为字符串。 您可以控制正则表达式抑制来做得更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM