解析DynamoDB batchGetItem JSON输出 [英] Parsing DynamoDB batchGetItem JSON output

查看:345
本文介绍了解析DynamoDB batchGetItem JSON输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Swift函数,该函数在AWS DynamoDB中执行batchGetItem。输出以JSON格式返回,但是我很难解析它。以下是我尝试用来解析数据的代码,以及JSON输出的外观。任何帮助深表感谢。谢谢。

I have a Swift function that performs a batchGetItem in AWS DynamoDB. The output is being returned in a JSON format, however I am having difficulty parsing it. Below is the code that I am trying to use to parse the data, as well as what the JSON output looks like. Any help is much appreciated. Thanks.

功能:

func batchGetItem () {

        let DynamoDB = AWSDynamoDB.default()

        var keys = [Any]()

        let idNumbers = Array
        let n = 0

        for i in 0...n {

            let value = AWSDynamoDBAttributeValue()
            value?.n = String(idNumbers[i])
            keys.append(["numID": value])

        }
let keysAndAttributesMap = AWSDynamoDBKeysAndAttributes()
        keysAndAttributesMap?.keys = keys as? [[String : AWSDynamoDBAttributeValue]]
        keysAndAttributesMap?.consistentRead = true
        let tableMap = ["tableName" : keysAndAttributesMap]
        let request = AWSDynamoDBBatchGetItemInput()
        request?.requestItems = tableMap as? [String : AWSDynamoDBKeysAndAttributes]
        request?.returnConsumedCapacity = AWSDynamoDBReturnConsumedCapacity.total
        DynamoDB.batchGetItem(request!) { (output, error) in

            if output != nil {
                print("Batch Query output?.responses?.count:", output!.responses!)
                print(output!.responses!)

                do {
                    let json = try JSONSerialization.jsonObject(with: output, options: .allowFragments) as! [String:Any]
                    let posts = json["posts"] as? [[String: Any]] ?? []
                    print(posts)
                } catch let error as NSError {
                    print(error)
                }
            }
            if error != nil {
                print("Batch Query error:", error!)
            }
        }
    }

Xcode错误消息
对成员'jsonObject(with:options:)'

JSON输出

["tableName": 
    [
        [
            "hashKey":  < AWSDynamoDBAttributeValue: 0x1c00b3e60 > {
                N = 1;
            }, 
            "foo":  < AWSDynamoDBAttributeValue: 0x1c40b4b20 > {
                S = dog;
            }, 
            "numID":  < AWSDynamoDBAttributeValue: 0x1c00b3e00 > {
                N = 1;
            }, 
            "name":  < AWSDynamoDBAttributeValue: 0x1c80b55a0 > {
                S = "John Doe";
            }, 
            "link":  < AWSDynamoDBAttributeValue: 0x1c40b4b80 > {
                S = "http://";
            }, 
            "idNum":  < AWSDynamoDBAttributeValue: 0x1c80b5660 > {
                N = 67343;
            }
        ]
    ]
]


推荐答案

您可以使用DynamoDB对象映射器为您解析数据。
https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html#add-aws-mobile-nosql-数据库原始

You can use the DynamoDB Object Mapper to parse the data for you. https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html#add-aws-mobile-nosql-database-crud

数据类的示例设置如下:

A sample setup for the data class would be like this:

import Foundation
import UIKit
import AWSDynamoDB

class Post: AWSDynamoDBObjectModel, AWSDynamoDBModeling {

    @objc var foo: String?
    @objc var numID: String?
    @objc var name: String?
    @objc var link: String?
    @objc var idNum: String?

    class func dynamoDBTableName() -> String {

        return "MY_TABLE"
    }

    class func hashKeyAttribute() -> String {

        return "numId"
    }

}

这篇关于解析DynamoDB batchGetItem JSON输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆