groovy - 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 正在传递,结果也一样。
解决方案
看起来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);
更多信息:
推荐阅读
- java - 如何记录 Java Record 参数?
- android - React Native Expo Android WebView
- r - 通过 tryCatch 中的函数内部的 stop() 捕获故意生成的错误
- swiftui - presentationMode.wrappedValue.dismiss() 无法正常工作
- elasticsearch - 将数据发布到 Elastic Search 变得越来越昂贵
- c# - 使用 Serilog 记录 Elasticsearch 而无需 Microsoft 日志记录
- javascript - 添加新的键值对
- html - 导航栏按钮未出现引导程序 4
- mysql - MySQL - 查询没有返回正确的结果
- angular - Bundle.js 从列表中丢失