【问题标题】:groovy JSON builder need to remove white spacesgroovy JSON builder 需要删除空格
【发布时间】:2018-08-30 18:39:07
【问题描述】:

我正在尝试使用 Groovy JSON 构建器构建 JSON。 使用的代码在 JSR223 中作为脚本如下: 使用的代码:

**def previousResponse = new groovy.json.JsonSlurper().parse(ctx.getPreviousResult().getResponseData())
@groovy.transform.Immutable
class Package {
    String ReferenceId
    String Name
    String Version
    Integer Size
}
def packages = previousResponse.Packages.collect { Package -> new Package(Package.ReferenceId, Package.Name, Package.LastVersion.Version, Package.LastVersion.Size) }
def builder = new groovy.json.JsonBuilder()
builder(HasDraftVersion: false,
        IsApprovalPending: null,
        IsInstalledSilently: true,
        LastModified: "/Date(1535570626907)/",
        LastModifiedBy: "Administrator",
        DeviceConfigurations: [],
        Packages: packages.collect(),
        LdapTargets: null,
        ReferenceId: null,
        DeviceFamily: 6,
        DeviceFamilyQualification: 0,
        Name: "test",
        Description: "",
        Random: "2018-08-29T15:16:47",
        IsPublicAPI: true)
sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('',builder.toString(),'')
sampler.setPostBodyRaw(true);        

The result I am getting from the above code is correct and is in the format:

{"HasDraftVersion":false,"IsApprovalPending":null,"IsInstalledSilently":true,"LastModified":"/Date(1535661532840)/","LastModifiedBy":"Administrator","DeviceConfigurations": [],"Packages":[{"referenceId":"282812e7-c3e6-4ecb-8267-bbe2c250ad59","version":"1.0","size":10465294,"name":"10MB","packageDependencies" :""},{"referenceId":"02f5b531-8e37-42c1-bfcb-ec8db0920bed","version":"1.0","size":104884390,"name":"100MB","packageDependencies":"" }],"LdapTargets":null,"ReferenceId":null,"DeviceFamily":6,"DeviceFamilyQualification":0,"Name":"work","Description":"","Random":"2018-08 -30T04:38:52","IsPublicAPI":true}

我面临的问题是标签和值的顺序,例如 Packages 标签的顺序应该是:

ReferenceID、名称、版本 PackageDependencies

当我将它传递给下一个 HTTP 请求时遇到的错误是

{"Data":null,"ErrorCode":0,"ErrorMessage":"参数 'ReferenceId' 具有无效值 ''。","HelpLink":null,"InnerErrors":[{"Data ":["ReferenceId",""],"ErrorCode":2,"ErrorMessage":"参数 'ReferenceId' 的值无效。","HelpLink":null,"InnerErrors":null,"Ref": "2018-08-30 16:38:52.9245-04:00"}],"Ref":"2018-08-30 16:38:52.9245-04:00"}

ReferenceId 正在传递,结果也是一样的。

【问题讨论】:

    标签: groovy jmeter jsr223


    【解决方案1】:

    看起来像 Groovy is converting maps names 匹配 naming convention

    因此,为了保持这些ReferenceID 参数和朋友不变,而不是骆驼情况,您需要修改这一行:

    Packages: packages.collect()
    

    用这个:

    Packages: packages.collect() {
         [
                 ReferenceId        : it.ReferenceId,
                 Name               : it.Name,
                 Version            : it.Version,
                 PackageDependencies: "",
                 Size               : it.Size
         ]
     },
    

    完整代码以防万一:

    def previousResponse = new groovy.json.JsonSlurper().parse(ctx.getPreviousResult().getResponseData())
    
    @groovy.transform.Immutable
    class Package {
        String ReferenceId
        String Name
        String Version
        Integer Size
    }
    
    def packages = previousResponse.Packages.collect { Package -> new Package(Package.ReferenceId, Package.Name, Package.LastVersion.Version, Package.LastVersion.Size) }
    
    def builder = new groovy.json.JsonBuilder()
    
    builder(HasDraftVersion: false,
            IsApprovalPending: null,
            IsInstalledSilently: true,
            LastModified: "/Date(1535570626907)/",
            LastModifiedBy: "Administrator",
            DeviceConfigurations: [],
            Packages: packages.collect() {
                [
                        ReferenceId        : it.ReferenceId,
                        Name               : it.Name,
                        Version            : it.Version,
                        PackageDependencies: "",
                        Size               : it.Size
                ]
            },
            LdapTargets: null,
            ReferenceId: null,
            DeviceFamily: 6,
            DeviceFamilyQualification: 0,
            Name: "test",
            Description: "",
            Random: "2018-08-29T15:16:47",
            IsPublicAPI: true)
    
    sampler.getArguments().removeAllArguments()
    sampler.addNonEncodedArgument('',builder.toPrettyString(),'')
    sampler.setPostBodyRaw(true);               
    

    更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      相关资源
      最近更新 更多