[英]Is there a simple way to convert JavaRDD<String> containing JSON to a custom Java object
[英]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.