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

时间:2015-12-01 06:51:33

标签: java json

我的字符串如下:

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中有任何转换库吗?

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

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

2 个答案:

答案 0 :(得分:0)

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

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

要解析字符串,首先必须确定如何将其拆分的规则(语法)。如果不相干,这个解析器将无法结束特殊情况。

答案 1 :(得分:0)

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);
    }

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