首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将DynamoDB专用JSON文本转换为普通JSON

将DynamoDB专用JSON文本转换为普通JSON
EN

Stack Overflow用户
提问于 2018-03-08 00:47:05
回答 2查看 6K关注 0票数 2

我有一个包含从DynamoDB导出的数据的文件,它具有DynamoDB的“特殊JSON”格式:

{"key1": {"m":{"key2":{"s":"val2"},"key3":{"s":"val3"}}}}

我需要解析这个文件,并将数据转换为(com.amazonaws.services.dynamodbv2.document.Item)项DynamoDB或普通JSON (我知道如何将普通JSON转换为条目)

我发现有一些方法可以像下面的文章一样将Map转换为项目: 1. 用Java将DynamoDB JSON转换为标准JSON 2. 如何从DynamoDB流新映像中获取纯Json字符串?

要使用这些文章中提到的解决方案,我需要编写代码将特殊的JSON转换为Map。

是否存在将DynamoDB“特殊JSON”文本转换为普通JSON或直接转换为DynamoDB项的本机方式?

EN

回答 2

Stack Overflow用户

发布于 2018-08-24 06:18:14

请使用此函数AWS.DynamoDB.Converter.unmarshall

相关文档:财产

票数 2
EN

Stack Overflow用户

发布于 2018-05-12 23:26:05

我也没有找到,所以我写了一些kotlin代码来做这件事

代码语言:javascript
运行
复制
// convert dynamodb json map to normal json map
@Suppress("unchecked_cast")
internal fun Map<String, Any>.toSimpleMapValue(): Map<String, Any> {
    return this.mapValues { (_, v) ->
        (v as Map<String, Any>).toSimpleValue()
    }
}

@Suppress("unchecked_cast", "implicit_cast_to_any")
private fun Map<String, Any>.toSimpleValue() : Any {
    require(this.size == 1)

    val list = this.map { (k, v) ->
         when (k) {
            "BOOL" -> when (v) {
                0 -> false
                1 -> true
                else -> throw IllegalArgumentException("Unknown value $v for boolean")
            }
            "S" -> v as String
            "N" -> BigDecimal(v as String)
            "B" -> copyAllBytesFrom(v as ByteBuffer)
            "SS" -> LinkedHashSet(v as List<String>)
            "NS" -> LinkedHashSet((v as List<String>).map { BigDecimal(it) })
            "BS" -> LinkedHashSet((v as List<ByteBuffer>).map { copyAllBytesFrom(it) })
            "L" -> ArrayList((v as List<Any>).map { (it as Map<String, Any>).toSimpleValue() })
            "M" -> (v as Map<String, Any>).toSimpleMapValue()

            else -> throw IllegalArgumentException("Invalid key $k")
        }
    }

    return list[0]
}

上面应该和AWS.DynamoDB.Converter.unmarshall在Javascript中做同样的处理。

然后使用Item.fromMap(newImage.toSimpleMapValue())将DynamoDB映射/Json转换为Item。

我没有测试所有的情况,特别是不确定二进制类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49163647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档