微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Coldfusion StructSetMetaData 不更新结构内数组中的项目

如何解决Coldfusion StructSetMetaData 不更新结构内数组中的项目

我有一个名为 requestStruct 的结构体,如下所示:

{"api_version":"1","SourceId":"99","CampaignId":"999","policy":{"zip":"60644","street_address":"43 Memory Lane","email":"test@test.com","currently_insured":"true","coverage_level":"2","current_carrier":"28","current_insured_duration":"7"},"drivers": [{"first_name":"Bat","last_name":"Man","birth_date":"1966-07-07","homeowner":"true","sr22":"false"},{"first_name ":"Boy","last_name":"Wonder",{"first_name":"Cat ","last_name":"Woman","birth_date":"1966-06-06",{"first_name":"Bat","last_name ":"Girl","birth_date":"1966-01-01","sr22":"false"}]}

这是发送到另一家公司 API 的 JSON,因此我无法控制他们所需的结构或数据类型。每个值在转换为 JSON 时都需要是字符串,但 Coldfusion 想要在使用 serializeJSON 时将像“99”这样的字符串转换为数字 99。所以我使用 StructSetMetaData 来确保它们被转换为 JSON 作为字符串。

这些语句工作正常:

<cfscript>                   
    Metadata = {
        api_version: {type:"string",name:"api_version"},SourceId: {type:"string",name:"SourceId"},CampaignId: {type:"string",name:"CampaignId"}
    };
    StructSetMetaData(requestStruct,Metadata);
</cfscript>

<cfscript>
    Metadata = {
        policy:{
            keys:{
                "zip":{type:"string",name:"zip"},"email":{type:"string",name:"email"},"currently_insured":{type:"string",name:"currently_insured"},"coverage_level":{type:"string",name:"coverage_level"},"current_carrier":{type:"string",name:"current_carrier"},"current_insured_duration":{type:"string",name:"current_insured_duration"}
            }
        }
    };
    StructSetMetaData(requestStruct,Metadata);
 </cfscript>

但我不知道如何对结构的驱动程序部分执行相同的操作,因为它包含一个数组。

我试过了,没有效果

<cfscript>
    Metadata = {
        drivers:{
            keys:{
                "homeowner":{type:"string",name:"homeowner"},"sr22":{type:"string",name:"sr22"}
            }
        }
    };
    StructSetMetaData(requestStruct,Metadata);
</cfscript>

我试过了,没有效果

<cfscript>
    Metadata = {
        drivers:{
            keys:{
                "homeowner[0]":{type:"string","sr22[0]":{type:"string",Metadata);
</cfscript>

如何为驱动程序密钥中的结构数组中的密钥设置元数据?

解决方法

我会做这样的事情。对于数组内部结构,您需要以与为 arraySetMetaData 函数提供元数据相同的方式提供元数据。

<cfset requestStruct = {"api_version":"1","SourceId":"99","CampaignId":"999","policy":{"zip":"60644","street_address":"43 Memory Lane","email":"test@test.com","currently_insured":"true","coverage_level":"2","current_carrier":"28","current_insured_duration":"7"},"drivers":[{"first_name":"Bat","last_name":"Man","birth_date":"1966-07-07","homeowner":"true","sr22":"false"},{"first_name":"Boy","last_name":"Wonder",{"first_name":"Cat","last_name":"Woman","birth_date":"1966-06-06",{"first_name":"Bat","last_name":"Girl","birth_date":"1966-01-01","sr22":"false"}]}>
<cfscript>
    metadata = {
      api_version: {type:"string",name:"api_version"},SourceId: {type:"string",name:"SourceId"},CampaignId: {type:"string",name:"CampaignId"},policy:{
          keys:{
              "zip":{type:"string",name:"zip"},"email":{type:"string",name:"email"},"currently_insured":{type:"string",name:"currently_insured"},"coverage_level":{type:"string",name:"coverage_level"},"current_carrier":{type:"string",name:"current_carrier"},"current_insured_duration":{type:"string",name:"current_insured_duration"}
          }
      }
    };
    driversMetadata = { 
      items: []
    };
    for(driver in requestStruct.drivers){
      driversMetadata.items.append({
        "homeowner":{type:"string",name:"homeowner"},"sr22":{type:"string",name:"sr22"}
      });
    }
    metadata.drivers = driversMetadata;
    StructSetMetaData(requestStruct,metadata);
</cfscript>

DEMO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。