使用JsonSlurper解析多个json的最佳方法

使用JsonSlurper解析多个json的最佳方法,json,groovy,Json,Groovy,我正在使用GroovyJsonSlurper解析json。我发现我应该在调用parseText()方法之前初始化一个JsonSlurper实例 当我要解析多个json对象(例如带有njson文本的LinkedList)时,我应该初始化nJsonSlurper还是初始化一个JsonSlurper并调用它的parseTextn次 当我在Web服务器上使用JsonSlurper时,只需维护oneglobalJsonSlurper实例并在任何地方使用它,这是最佳做法吗?或者在每次收到HTTP请求时初始化

我正在使用Groovy
JsonSlurper
解析json。我发现我应该在调用
parseText()
方法之前初始化一个
JsonSlurper
实例

  • 当我要解析多个json对象(例如带有
    n
    json文本的
    LinkedList
    )时,我应该初始化
    n
    JsonSlurper
    还是初始化一个
    JsonSlurper
    并调用它的
    parseText
    n次

  • 当我在Web服务器上使用
    JsonSlurper
    时,只需维护oneglobal
    JsonSlurper
    实例并在任何地方使用它,这是最佳做法吗?或者在每次收到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
    对象始终保留在内存中听起来像是浪费资源