我使用Spring,Jersey和Jackson来提供生成JSON的API.
我的@Component有一个@Get方法,它返回Response.ok(entity).build().
输出非常紧凑.如何使输出漂亮/格式化?
任何人都有一个现成的函数,它将采用XML字符串并返回正确缩进的字符串?
例如
<XML><TAG1>A</TAG1><TAG2><Tag3></Tag3></TAG2></XML>
Run Code Online (Sandbox Code Playgroud)
并在插入换行符和制表符或空格后返回格式良好的String?
OCaml repl("toplevel")具有丰富的打印功能,适用于任何类型,用户定义或其他类型.是否可以在顶层之外访问此功能,而不必为自己的整个类型集编写一组完全自定义的值打印机?
C#是否有漂亮的打印机/代码格式化程序(作为构建系统的一部分)?读作:"生活在Visual Studio之外".对于Java,C++/C,Go来说似乎有很多这样的东西 - 所以C#应该还有一些代码格式化程序存在于IDE之外,这似乎更合理吗?
(我实际上喜欢将格式化程序与StyleCop结合起来,并且让dev在提交之前将其作为进程的一部分运行).
注意:不是语法高亮,如在网页中的代码中.相反,代码美化器或代码漂亮的打印机,它将代码和格式化为样式/标准编码格式...... StyleCop进行样式检查以查看代码是否符合格式.
我的问题:在没有多余括号的情况下,打印表达式的最简洁方法是什么?
我有lambda表达式的以下表示:
Term ::= Fun(String x, Term t)
| App(Term t1, Term t2)
| Var(String x)
Run Code Online (Sandbox Code Playgroud)
按惯例App是左关联的,a b c即被解释为(a b) c和函数体尽可能向右伸展,? x. x y即被解释为? x. (x y).
我有一个很好的解析器,但现在我想要一个漂亮的打印机.这是我目前拥有的(伪scala):
term match {
case Fun(v, t) => "(? %s.%s)".format(v, prettyPrint(t))
case App(s, t) => "(%s %s)".format(prettyPrint(s), prettyPrint(t))
case Var(v) => v
}
Run Code Online (Sandbox Code Playgroud)
上面的打印机总是放置( )表达式(原子变量除外).因此Fun(x, App(Fun(y, x), y))它产生了
(? x.((? y.x) y))
Run Code Online (Sandbox Code Playgroud)
我想拥有
? x.(? y.x) …Run Code Online (Sandbox Code Playgroud) 我想打印NumPy表格数组数据,以便它看起来不错.R和数据库控制台似乎表现出很好的能力.但是,NumPy的表格数组的内置打印看起来像垃圾:
import numpy as np
dat_dtype = {
'names' : ('column_one', 'col_two', 'column_3'),
'formats' : ('i', 'd', '|S12')}
dat = np.zeros(4, dat_dtype)
dat['column_one'] = range(4)
dat['col_two'] = 10**(-np.arange(4, dtype='d') - 4)
dat['column_3'] = 'ABCD'
dat['column_3'][2] = 'long string'
print(dat)
# [(0, 0.0001, 'ABCD') (1, 1.0000000000000001e-005, 'ABCD')
# (2, 9.9999999999999995e-007, 'long string')
# (3, 9.9999999999999995e-008, 'ABCD')]
print(repr(dat))
# array([(0, 0.0001, 'ABCD'), (1, 1.0000000000000001e-005, 'ABCD'),
# (2, 9.9999999999999995e-007, 'long string'),
# (3, 9.9999999999999995e-008, 'ABCD')],
# dtype=[('column_one', '<i4'), ('col_two', '<f8'), ('column_3', '|S12')])
Run Code Online (Sandbox Code Playgroud)
我希望看起来更像数据库吐出的东西,例如postgres风格: …
如何在通用遍历解析树的同时访问ANTLR4中的备用标签?或者,是否有任何方法可以复制^ANTLR3 的运算符的功能,因为这样可以解决问题.
我正在尝试为任何符合简单方法的ANTLR4语法编写AST漂亮的打印机(比如用替代标签命名产品).我希望能够打印出更漂亮的一个术语类似3 + 5的(int_expression (plus (int_literal 3) (int_literal 5))),或类似的东西,给出类似下面的语法:
int_expression
: int_expression '+' int_expression # plus
| int_expression '-' int_expression # minus
| raw_int # int_literal
;
raw_int
: Int
;
Int : [0-9]+ ;
Run Code Online (Sandbox Code Playgroud)
我无法有效地为制作plus和minus制作命名,因为将它们拉到自己的制作中会导致工具抱怨规则是相互左递归的.如果我不能把它们拉出来,我怎么能给这些作品命名呢?
注1:+通过将"好"终端(例如,Int上面的)放在特殊制作中(以特殊前缀开头的制作等raw_),我能够在方法论上摆脱论证.然后,我只能打印那些父作品被命名为" raw_......"而终止所有其他作品的终端.这非常适合摆脱+,同时保持3和5输出.这可以通过!ANTLR3完成.
注意2:我知道我可以编写一个专门的漂亮的打印机或为给定语言的每个产生使用动作,但我想使用ANTLR4来解析和生成各种语言的AST,看起来我应该是能够编写如此简单漂亮的打印机.换句话说,我只关心获得AST,而我宁愿不用每个语法来使用量身定制的漂亮打印机来获取AST.也许我应该回到ANTLR3?
我正在尝试使用Jackson库通过使用JAXB注释将Java对象序列化为XML.但是,我在打印XML输出时遇到了一个问题.
这是我的示例代码用法:
ObjectMapper mapper = new XmlMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String xml = mapper.writeValueAsString(person);
Run Code Online (Sandbox Code Playgroud)
而且,我看到了以下异常.这里的问题是Jackson使用Stax2Writer作为XML编写器,而Stax2似乎不支持编写原始字符串(在这种情况下,DefaultPrettyPrinter尝试将"\n"写为原始字符串).
com.fasterxml.jackson.databind.JsonMappingException: Not implemented (through reference chain: xml.serialization.jackson.dto.Person["name"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:187)
at com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializer.serializeFields(XmlBeanSerializer.java:174)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider.serializeValue(XmlSerializerProvider.java:92)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2818)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2275)
at xml.serialization.jackson.SerializationTest.main(SerializationTest.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.UnsupportedOperationException: Not implemented
at org.codehaus.stax2.ri.Stax2WriterAdapter.writeRaw(Stax2WriterAdapter.java:380)
at org.codehaus.stax2.ri.Stax2WriterAdapter.writeRaw(Stax2WriterAdapter.java:373)
at com.fasterxml.jackson.dataformat.xml.util.DefaultXmlPrettyPrinter$Lf2SpacesIndenter.writeIndentation(DefaultXmlPrettyPrinter.java:498)
at com.fasterxml.jackson.dataformat.xml.util.DefaultXmlPrettyPrinter.writeLeafElement(DefaultXmlPrettyPrinter.java:271)
at com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator.writeString(ToXmlGenerator.java:489)
at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:39)
at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:21)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:541)
at com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializer.serializeFields(XmlBeanSerializer.java:161)
... 10 more
Run Code Online (Sandbox Code Playgroud)
有关如何解决它的任何想法?
我有一个列表字典,列表很长.如何以只显示列表中的几个元素的方式打印它?显然,我可以为此编写一个自定义函数,但有没有可以实现此功能的内置方法或库?例如,在打印大型数据框时,pandas可以很快地打印出来.
这个例子更能说明我的意思:
obj = {'key_1': ['EG8XYD9FVN',
'S2WARDCVAO',
'J00YCU55DP',
'R07BUIF2F7',
'VGPS1JD0UM',
'WL3TWSDP8E',
'LD8QY7DMJ3',
'J36U3Z9KOQ',
'KU2FUGYB2U',
'JF3RQ315BY'],
'key_2': ['162LO154PM',
'3ROAV881V2',
'I4T79LP18J',
'WBD36EM6QL',
'DEIODVQU46',
'KWSJA5WDKQ',
'WX9SVRFO0G',
'6UN63WU64G',
'3Z89U7XM60',
'167CYON6YN']}
Run Code Online (Sandbox Code Playgroud)
期望的输出:这样的事情:
{'key_1':
['EG8XYD9FVN', 'S2WARDCVAO', '...'],
'key_2':
['162LO154PM', '3ROAV881V2', '...']
}
Run Code Online (Sandbox Code Playgroud)