Java 将JSON作为输入并给出经过修饰的JSON的程序

Java 将JSON作为输入并给出经过修饰的JSON的程序,java,json,stack,Java,Json,Stack,我们需要从STDIN读取JSON。输入给出一行经过修饰的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 { pu

我们需要从STDIN读取JSON。输入给出一行经过修饰的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;
     }
}
公共类JSONPetty{
公共静态void main(字符串[]args){
字符串myJsObj=“{”组“:{list:[1,2,3]},list:[“a”,“b”,“c”]}”;
System.out.println(isMatched(myJsObj));
}
公共静态StringBuffer已匹配(字符串表达式){
final String opening=“{”//开头分隔符
final String closing=“}”;//各自的结束分隔符
stringbuffertemp=null;
堆栈<字符>缓冲区=新堆栈();
for(char c:expression.toCharArray()){
if(opening.indexOf(c)!=-1)//这是一个左分隔符
{
试一试{
//此处temp没有附加其返回的null值
临时追加(“{”+“\n”);
}捕获(例外e){
System.out.println(例如toString());
}  
}
if(closing.indexOf(c)!=-1)//这是一个左分隔符
{
临时追加(“}”+“\n”);
}  
}
返回温度;
}
}

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

出现异常的原因是您的
StringBuffer
变量
temp
从未设置为任何值。将其声明为
null
,然后尝试对其调用
append
方法。您应该改为将其设置为新的StringBuffer,如下所示:

StringBuffer temp = new StringBuffer();

您可能在输出中只得到空大括号,原因可能是-如果字符不是“{”或“}”,您不会向字符串缓冲区追加任何内容。也
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));  
    }
}
import java.util.*;
公共类MyClass{
公共静态StringBuffer已匹配(字符串表达式){
final String opening=“{”//开头分隔符
final String closing=“}”;//各自的结束分隔符
StringBuffer temp=新的StringBuffer();
堆栈<字符>缓冲区=新堆栈();
char[]ch=expression.toCharArray();
for(int i=0;i

您可以参考此代码。

其可能的重复项不是重复项。在发布之前,我已经核对了这些东西。介意解释一下为什么它不能被认为是重复的吗?这两个问题都有相同的意图!可能重复的请确保从输入字符串中删除这些“Microsoft Word quote”字符。这些是unicode字符,与您期望的任何合法字符值都不匹配。改用转义符和常规字符引号,如
“{\“group\”:{list…”