我的字符串如下:
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中有任何转换库吗?
如果没有库,那么代码片段将非常有助于理解。
好吧,我不想使用任何外部库。
答案 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);
}
只能将每个值视为字符串。你可以控制正则表达式的压制来做得更好。