我们需要从STDIN读取JSON。输入提供了一行ugliefied JSON。 输出应格式化为JSON。检查标准输出链接。 使用2个空格(不是'\ t')进行一次缩进。
示例输入:
{“group” : {list : [1,2,3]}, “list” : [“a”,”b”,”c”]}
示例输出:
{
“group” : {
List : [1,2,3]
},
“list” : [“a”,”b”,”c”]
}
以下是我正在使用的代码:
public class JSONPetty {
public static void main(String[] args) {
String myJsObj = "{“group” : {list : [1,2,3]}, “list” : [“a”,”b”,”c”]}";
System.out.println(isMatched(myJsObj));
}
public static StringBuffer isMatched(String expression) {
final String opening = "{"; // opening delimiters
final String closing = "}"; // respective closing delimiters
StringBuffer temp = null;
Stack < Character > buffer = new Stack <Character > ();
for (char c: expression.toCharArray()) {
if (opening.indexOf(c)!= -1) // this is a left delimiter
{
try {
//Here temp is not appending its returning null value
temp.append("{" + "\n");
} catch (Exception e) {
System.out.println(e.toString());
}
}
if (closing.indexOf(c)!= -1) // this is a left delimiter
{
temp.append("}" + "\n");
}
}
return temp;
}
}
此外,需要知道是否有人有任何其他更好的解决方案。
答案 0 :(得分:0)
您获得此异常的原因是您的StringBuffer
变量temp
永远不会设置为任何内容。您将其声明为null
,然后尝试在其上调用append
方法。你应该改为像这样new StringBuffer
:
StringBuffer temp = new StringBuffer();
答案 1 :(得分:0)
您可能在输出中只得到空大括号,原因可能是 - 您没有向字符串缓冲区附加任何内容,以防字符碰巧不是“{”或“}”。 temp.append("}" + "\n");
也会将 }
放在同一行。
import java.util.*;
public class MyClass {
public static StringBuffer isMatched(String expression) {
final String opening = "{"; // opening delimiters
final String closing = "}"; // respective closing delimiters
StringBuffer temp = new StringBuffer();
Stack < Character > buffer = new Stack <Character > ();
char[] ch = expression.toCharArray();
for (int i = 0 ; i < ch.length ;i++) {
char c = ch[i];
if (opening.indexOf(c)!= -1) // this is a left delimiter
{
//Here temp is not appending its returning null value
temp.append("{" + "\n");
}
else if (closing.indexOf(c)!= -1) // this is a left delimiter
{
char extraComma = (i+1) < ch.length ? ',' : ' ';
temp.append("\n" + "}"+ extraComma + "\n");
i++;
}
else{
temp.append(c);
}
}
return temp;
}
public static void main(String args[]) {
String myJsObj = "{\"group\" : {list : [1,2,3]}, \"list\" : [\"a\",\"b\",\"c\"]}";
System.out.println(isMatched(myJsObj));
}
}
你可以参考这个代码。