使用JsonSlurper解析多个json的最佳方法
我正在使用Groovy使用JsonSlurper解析多个json的最佳方法,json,groovy,Json,Groovy,我正在使用GroovyJsonSlurper解析json。我发现我应该在调用parseText()方法之前初始化一个JsonSlurper实例 当我要解析多个json对象(例如带有njson文本的LinkedList)时,我应该初始化nJsonSlurper还是初始化一个JsonSlurper并调用它的parseTextn次 当我在Web服务器上使用JsonSlurper时,只需维护oneglobalJsonSlurper实例并在任何地方使用它,这是最佳做法吗?或者在每次收到HTTP请求时初始化
JsonSlurper
解析json。我发现我应该在调用parseText()
方法之前初始化一个JsonSlurper
实例
n
json文本的LinkedList
)时,我应该初始化n
JsonSlurper
还是初始化一个JsonSlurper
并调用它的parseText
n次JsonSlurper
时,只需维护oneglobalJsonSlurper
实例并在任何地方使用它,这是最佳做法吗?或者在每次收到HTTP请求时初始化实例或者更清楚地说,
JsonSlurper
的构造函数是做什么的?您可以将JsonSlurper
看作是创建具体JSON解析器实现的门面。例如,在调用parse()
或parseText()
方法时创建的默认解析器是jsonparsercharray
。如果查看JsonSlurper
源代码,您将看到它封装了以下五个私有字段:
private int maxSizeForInMemory = 2000000;
private boolean chop = false;
private boolean lazyChop = true;
private boolean checkDates = true;
private JsonParserType type = JsonParserType.CHAR_BUFFER;
当您创建JsonSlurper
时,您使用这些默认值,但是对于任何特定的用例,您都可以修改它们以满足您的最佳需要
在回答第一个问题时,实例化一个JsonSlurper
并在迭代列表时使用它解析所有字符串是有意义的。比如:
def slurper = new JsonSlurper()
def parsed = jsons.collect { slurper.parseText(it) }
如果列表大小为1000,那么它将创建一个JsonSlurper
对象和1000个JsonParser
对象,而不是1000个JsonSlurper
对象和1000个JsonParser
对象
回答你的第二个问题,这个问题没有很好的上下文无关的答案。这在很大程度上取决于一些因素,如服务器负载、JSON序列化/反序列化频率、可用内存、JsonSlurper
用例等。实际上,您必须监控您的应用程序,并对这两种方法进行实验,以了解哪些方法更适合您。例如,如果您的应用程序不断地处理HTTP请求,并且它总是创建相同的<代码> JSONSURURP</代码>,并使用完全相同的默认值,那么您可能会考虑创建一个单节点bean,该bean注入同一个实例“代码> JSONSURURP</代码>来处理每个HTTP请求。但另一方面,如果您的应用程序没有遇到大量并行请求,并且平均处理几个连续请求,那么将JsonSlurper
对象始终保留在内存中听起来像是浪费资源