AWS网关API无法将数组中的DynamoDb JSON转换为常规JSON

AWS网关API无法将数组中的DynamoDb JSON转换为常规JSON,json,amazon-web-services,amazon-dynamodb,aws-api-gateway,Json,Amazon Web Services,Amazon Dynamodb,Aws Api Gateway,我正在尝试创建一个从dynamo db数据库输出json的服务。然而,在AmazonGatewayAPI中实现主体映射模板后,该服务仅将DynamodbJSON的片段转换为常规json。日志中没有可见的错误。我在下面附上了主体映射模板,以及GET的响应主体 主体映射模板: #set($inputRoot = $input.path('$')) #foreach($elem in $inputRoot.Items) { "accession" : "$elem.ac

我正在尝试创建一个从dynamo db数据库输出json的服务。然而,在AmazonGatewayAPI中实现主体映射模板后,该服务仅将DynamodbJSON的片段转换为常规json。日志中没有可见的错误。我在下面附上了主体映射模板,以及GET的响应主体

主体映射模板:

    #set($inputRoot = $input.path('$'))
    #foreach($elem in $inputRoot.Items) {
        "accession" : "$elem.accession.S",
        "entryName" : "$elem.entryName.S",
        "sequence" : "$elem.sequence.S",
        "sequenceChecksum" : "$elem.sequenceChecksum.S",
        "taxid" : "$elem.taxid.N",
        "features" : "$elem.features.L"
    } #if($foreach.hasNext),#end
    #end
答复:

 {
   "accession" : "P05067",
   "entryName" : "A4_HUMAN",
   "sequence" : "MLPGLALLLLAAWTARALEVPTDGNAGLLAEPQIAMFCGRLNMHMNVQNGKWDSDPSGTKTCIDTKEGILQYCQEVYPELQITNVVEANQPVTIQNWCKRGRKQCKTHPHFVIPYRCLVGEFVSDALLVPDKCKFLHQERMDVCETHLHWHTVAKETCSEKSTNLHDYGMLLPCGIDKFRGVEFVCCPLAEESDNVDSADAEEDDSDVWWGGADTDYADGSEDKVVEVAEEEEVAEVEEEEADDDEDDEDGDEVEEEAEEPYEEATERTTSIATTTTTTTESVEEVVREVCSEQAETGPCRAMISRWYFDVTEGKCAPFFYGGCGGNRNNFDTEEYCMAVCGSAMSQSLLKTTQEPLARDPVKLPTTAASTPDAVDKYLETPGDENEHAHFQKAKERLEAKHRERMSQVMREWEEAERQAKNLPKADKKAVIQHFQEKVESLEQEAANERQQLVETHMARVEAMLNDRRRLALENYITALQAVPPRPRHVFNMLKKYVRAEQKDRQHTLKHFEHVRMVDPKKAAQIRSQVMTHLRVIYERMNQSLSLLYNVPAVAEEIQDEVDELLQKEQNYSDDVLANMISEPRISYGNDALMPSLTETKTTVELLPVNGEFSLDDLQPWHSFGADSVPANTENEVEPVDARPAADRGLTTRPGSGLTNIKTEEISEVKMDAEFRHDSGYEVHHQKLVFFAEDVGSNKGAIIGLMVGGVVIATVIVITLVMLKKKQYTSIHHGVVEVDAAVTPEERHLSKMQQNGYENPTYKFFEQMQN",
   "sequenceChecksum" : "A12EE761403740F5",
   "taxid" : "9606",
   "features" : "[{"M":{"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":" "},"type":"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Amyloid beta A4 protein"},"type":{"S":"CHAIN"},"end":{"S":"770"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000089"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Soluble APP-alpha"},"type":{"S":"CHAIN"},"end":{"S":"687"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000090"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Soluble APP-beta"},"type":{"S":"CHAIN"},"end":{"S":"671"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000381966"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"N-APP"},"type":{"S":"CHAIN"},"end":{"S":"286"},"begin":{"S":"18"}}},{"M":{"ftId":{"S":"PRO_0000000091"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"C99"},"type":{"S":"CHAIN"},"end":{"S":"770"},"begin":{"S":"672"}}},{"M":{"ftId":{"S":"PRO_0000000092"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Beta-amyloid protein 42"},"type":{"S":"CHAIN"},"end":{"S":"713"},"begin":{"S":"672"}}}]"
        }         
Response Headers
{"Content-Type":"application/json"}
Logs
Execution log for request test-request
Mon Aug 08 15:26:05 UTC 2016 : Starting execution for request: test-invoke-request
Mon Aug 08 15:26:05 UTC 2016 : HTTP Method: GET, Resource Path: /proteins/{accession}
Mon Aug 08 15:26:05 UTC 2016 : Method request path: {accession=P05067}
Mon Aug 08 15:26:05 UTC 2016 : Method request query string: {}
Mon Aug 08 15:26:05 UTC 2016 : Method request headers: {}
Mon Aug 08 15:26:05 UTC 2016 : Method request body before transformations: null
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request URI: https://dynamodb.us-west-2.amazonaws.com/?Action=Query
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request headers: {Authorization=****************************************************************************************************************************************************************************************************************************************************************************************b0b302, X-Amz-Date=20160808T152605Z, x-amzn-apigateway-api-id=9x56sueb85, Accept=application/json, User-Agent=AmazonAPIGateway_9x56sueb85, X-Amz-Security-Token=AgoGb3JpZ2luEJv//////////wEaCXVzLXdlc3QtMiKAAlXlB1cz9vo5Kf2llpupTpP1fTiHMBBbZhOmQW30/jCc5Q3RV+BM9k0LtqfJXRdRpzw5DEHg1dmlA1k8Ljha+og4RGYFdpj/9wdc4u1WKnZdy/lZFUAMey0YotNc+RniWyMq+ZiVhY94Sv/zKJ+dxSGkDZbz5A6Jbfj4EfVFuMLC3kHA4tJKWp6PCXpyHJqFqQ+UuI/q0coHNQv0euBD6hNUBOEBZes2TIQdTha8f4k+avX7o1f3LcpIjfvdPN4InOXZ7ZMHDgpLEuxurOZ7taZjoXftHxpRG2GAciTNj7gQASCsxRAQL/4gujC6yydGievEE6V5Zn5prIRnHPz0Lmcq8QII8f//////////ARAAGgw5MTUzMzI4Mzc1NDAiDD4AxveOBPRjUQ28ZirFAj5mJUN8gxUfXUQc1AzD08pLgpAtrz11K1Xgax/ATvptUj//Pcy+4fS90PqdZSqMSmS8KsD0X46m7GfhNNzuQypCdY3lyyN [TRUNCATED]
Mon Aug 08 15:26:05 UTC 2016 : Endpoint request body after transformations: {
    "TableName": "Protein_DB",
    "IndexName": "accession-index",
    "KeyConditionExpression": "accession = :v1",
        "ExpressionAttributeValues": {
            ":v1":  {
                "S": "P05067"
            }
        }
}
Mon Aug 08 15:26:05 UTC 2016 : Endpoint response body before transformations: {"Count":1,"Items":[{"accession":{"S":"P05067"},"features":{"L":[{"M":{"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":" "},"type":{"S":"SIGNAL"},"evidences":{"L":[{"M":{"source":{"M":{"id":{"S":"12665801"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/12665801"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/12665801"}}},"code":{"S":"ECO:0000269"}}},{"M":{"source":{"M":{"id":{"S":"2900137"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/2900137"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/2900137"}}},"code":{"S":"ECO:0000269"}}},{"M":{"source":{"M":{"id":{"S":"3597385"},"alternativeUrl":{"S":"http://europepmc.org/abstract/MED/3597385"},"name":{"S":"PubMed"},"url":{"S":"http://www.ncbi.nlm.nih.gov/pubmed/3597385"}}},"code":{"S":"ECO:0000269"}}}]},"end":{"S":"17"},"begin":{"S":"1"}}},{"M":{"ftId":{"S":"PRO_0000000088"},"category":{"S":"MOLECULE_PROCESSING"},"description":{"S":"Amyloid b [TRUNCATED]
Mon Aug 08 15:26:05 UTC 2016 : Endpoint response headers: {x-amzn-RequestId=J0J7K1RFDOGEK20V70T0HKJ14JVV4KQNSO5AEMVJF66Q9ASUAAJG, x-amz-crc32=273504943, Content-Length=75281, Date=Mon, 08 Aug 2016 15:26:05 GMT, Content-Type=application/x-amz-json-1.0}
Mon Aug 08 15:26:05 UTC 2016 : Method response body after transformations: 
         {
            "accession" : "P05067",
            "entryName" : "A4_HUMAN",
            "sequence" : "MLPGLALLLLAAWTARALEVPTDGNAGLLAEPQIAMFCGRLNMHMNVQNGKWDSDPSGTKTCIDTKEGILQYCQEVYPELQITNVVEANQPVTIQNWCKRGRKQCKTHPHFVIPYRCLVGEFVSDALLVPDKCKFLHQERMDVCETHLHWHTVAKETCSEKSTNLHDYGMLLPCGIDKFRGVEFVCCPLAEESDNVDSADAEEDDSDVWWGGADTDYADGSEDKVVEVAEEEEVAEVEEEEADDDEDDEDGDEVEEEAEEPYEEATERTTSIATTTTTTTESVEEVVREVCSEQAETGPCRAMISRWYFDVTEGKCAPFFYGGCGGNRNNFDTEEYCMAVCGSAMSQSLLKTTQEPLARDPVKLPTTAASTPDAVDKYLETPGDENEHAHFQKAKERLEAKHRERMSQVMREWEEAERQAKNLPKADKKAVIQHFQEKVESLEQEAANERQQLVETHMARVEAMLNDRRRLALENYITALQAVPPRPRHVFNMLKKYVRAEQKDRQHTLKHFEHVRMVDPKKAAQIRSQVMTHLRVIYERMNQSLSLLYNVPAVAEEIQDEVDELLQKEQNYSDDVLANMISEPRISYGNDALMPSLTETKTTVELLPVNGEFSLDDLQPWHSFGADSVPANTENEVEPVDARPAADRGLTTRPGSGLTNIKTEEISEVKMDAEFRHDSGYEVHHQKLVFFAEDVGSNKGAIIGLMVGGVVIATVIVITLVMLKKKQYTSIHHGVVEVDAAVTPEERHLSKMQQNGYENPTYKFFEQMQN",
            "sequenceChecksum" : "A12EE761403740F5",
            "taxid" : "9606",
             [TRUNCATED]
Mon Aug 08 15:26:05 UTC 2016 : Method response headers: {Content-Type=application/json}
Mon Aug 08 15:26:05 UTC 2016 : Successfully completed execution
Mon Aug 08 15:26:05 UTC 2016 : Method completed with status: 200
我试图格式化Features字段,但收效甚微。以下是我的尝试:

#set($inputRoot = $input.path('$'))

        #foreach($elem in $inputRoot.Items) {
            "accession" : "$elem.accession.S",
            "entryName" : "$elem.entryName.S",
            "sequence" : "$elem.sequence.S",
            "sequenceChecksum" : "$elem.sequenceChecksum.S",
            "taxid" : "$elem.taxid.N",
            "features" : "$elem.features.L"
        }#if($foreach.hasNext),#end
#end

#foreach($elem in $inputRoot.Items.features)
      {
        "alternativeSequence": "$elem.alternativeSequence.S",
        "begin": "$elem.begin.S",
        "category": "$elem.category.S",
        "description": "$elem.description.S",
        "end": "$elem.end.S",
        "evidences": "$elem.evidences.L",
        "ftID": "$elem.ftId.S",
        "type": "$elem.type.S"
      }#if($foreach.hasNext),#end

#end``

问题是否在“功能”字段中?我想你只是在不必要的时候加了引号

#set($inputRoot = $input.path('$'))
#foreach($elem in $inputRoot.Items) {
    "accession" : "$elem.accession.S",
    "entryName" : "$elem.entryName.S",
    "sequence" : "$elem.sequence.S",
    "sequenceChecksum" : "$elem.sequenceChecksum.S",
    "taxid" : "$elem.taxid.N",
    "features" : $elem.features.L
} #if($foreach.hasNext),#end
#end

问题是$elem是一个变量而不是一个函数,不能在foreach循环中重用。必须为变量指定一个新名称,例如$elem1。我已在下面附上最终工作机构模板

#set($inputRoot = $input.path('$'))

     #foreach($elem in $inputRoot.Items) {
        "accession" : "$elem.accession.S",
        "entryName" : "$elem.entryName.S",
        "sequence" : "$elem.sequence.S",
        "sequenceChecksum" : "$elem.sequenceChecksum.S",
        "taxid" : $elem.taxid.N,
        "features" : [
                        #foreach($elem1 in $elem.features.L){
                            "alternativeSequence": "$elem1.M.alternativeSequence.S",
                            "begin": "$elem1.M.begin.S",
                            "category": "$elem1.M.category.S",
                            "description": "$elem1.M.description.S",
                            "end": "$elem1.M.end.S",
                            "evidences": [
                                            #foreach($elem2 in $elem1.M.evidences.L){
                                                "code":"$elem2.M.code.S",
                                                "source" : #foreach($elem3 in $elem2.M.source){
                                                           "alternativeUrl" : "$elem3.alternativeUrl.S",
                                                           "id":"$elem3.id.S",
                                                           "name":"$elem3.name.S",
                                                           "url":"$elem3.url.S",
                                                       }#if($foreach.hasNext),#end
                                                       #end
                                            }#if($foreach.hasNext),#end
                                            #end
                                        ],
                            "ftID": "$elem1.M.ftId.S",
                            "type": "$elem1.M.type.S"
                        }#if($foreach.hasNext),#end
                        #end
                    ]
    }#if($foreach.hasNext),#end

endYes,问题是features字段。这是一个很大的列表,可以正确地使用常规json格式,但是,它的内容仍然是dynamodb json格式。这似乎只是不最小化dynamodb json。那么您认为应该发生什么呢?API网关不知道DDB记录的模式,因此您必须自己对pretty JSON进行任何转换,就像您对其他字段所做的那样。我不知道如何修改features数组的内容,使其成为常规JSON。