有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Json字段之间添加行删除和适当的选项卡?

我写了这段代码:

ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());
try
{
    writer.writeValue(new File(jsonFile.getAbsolutePath()), jsonData);
}
catch (IOException e)
{
}

我得到的结果是:

{
  "type" : "aaa",
  "key" : {
    "key1" : "bbb",
    "key 2" : [ {
      "value" : "xx"
    }, {
      "value" : "sss"
    }, {
      "value" : "zzz"
    }]
  }
}

我希望内容是:

{
  "type" : "aaa",
  "key" : 
   {
    "key1" : "bbb",
    "key 2" :
    [
      {
        "value" : "xx"
      }, 
      {
        "value" : "sss"
      }, 
      {
        "value" : "zzz"
      }
    ]
  }
}

我希望它与任何括号中的下降线,和标签数量兼容。 如何在Json字段之间添加换行符和适当的选项卡


共 (2) 个答案

  1. # 2 楼答案

    要实现这样的格式,您需要实现自己的PrettyPrinter

    class ObjectArrayInNewLinePrettyPrinter extends DefaultPrettyPrinter {
    
        public ObjectArrayInNewLinePrettyPrinter() {
            super();
        }
    
        public ObjectArrayInNewLinePrettyPrinter(DefaultPrettyPrinter base) {
            super(base);
        }
    
        @Override
        public void writeStartObject(JsonGenerator g) throws IOException {
            _objectIndenter.writeIndentation(g, _nesting);
            super.writeStartObject(g);
        }
    
        @Override
        public void writeStartArray(JsonGenerator g) throws IOException {
            _arrayIndenter.writeIndentation(g, _nesting);
            super.writeStartArray(g);
        }
    
        @Override
        public DefaultPrettyPrinter createInstance() {
            return new ObjectArrayInNewLinePrettyPrinter(this);
        }
    }
    

    您可以按如下方式使用:

    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.util.DefaultIndenter;
    import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.databind.json.JsonMapper;
    
    import java.io.File;
    import java.io.IOException;
    
    public class JsonPrettyPrinterApp {
        public static void main(String[] args) throws IOException {
            File jsonFile = new File("./resource/test.json").getAbsoluteFile();
    
            DefaultPrettyPrinter printer = new ObjectArrayInNewLinePrettyPrinter();
            printer.indentArraysWith(new DefaultIndenter());
    
            JsonMapper mapper = JsonMapper.builder()
                    .enable(SerializationFeature.INDENT_OUTPUT)
                    .defaultPrettyPrinter(printer)
                    .build();
    
            JsonNode root = mapper.readTree(jsonFile);
    
            mapper.writeValue(System.out, root);
        }
    }
    

    以上代码打印:

    {
      "type" : "aaa",
      "key" : 
      {
        "key1" : "bbb",
        "key 2" : 
        [
          
          {
            "value" : "xx"
          },
          
          {
            "value" : "sss"
          },
          
          {
            "value" : "zzz"
          }
        ]
      }
    }
    

    打印出与你想要的相似的东西