将JSON作为输入并给出美化JSON的程序

时间:2018-01-15 18:45:10

标签: java json stack

我们需要从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;
     }
}

此外,需要知道是否有人有任何其他更好的解决方案。

2 个答案:

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

你可以参考这个代码。