首页 > 解决方案 > groovy JSON builder 需要删除空格

问题描述

我正在尝试使用 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":"作品","描述":"","随机":"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 正在传递,结果也一样。

标签: groovyjmeterjsr223

解决方案


看起来Groovy 正在转换地图名称以匹配命名约定

因此,为了使这些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);               

更多信息:


推荐阅读