哪种json结构更符合我的要求?

时间:2016-02-07 15:42:42

标签: javascript json amazon-dynamodb

我想存储链接和文字。链接可以是图像,视频或GIF。我想按照用户指定的顺序存储它们。 例如:img1,一些文字,视频,img2 - 这应该保存为json。

到目前为止,我提出了两个选择:

第一

{
    "content": {
        "0": ["image", "image-link-here"],
        "1": ["text", "this is some text here"],
        "2": ["image", "2nd-image-link"],
        "3": ["video", "video-link"]
    }
}

第二:在这种情况下,我可以通过扩展名知道它的图像,视频,gif或文字

{
    "content": ["https://somelink.com/pic.jpg", "this is a text", "https://somelink.com/pic2.png", "https://somelink.com/vid.mp4"]
}

我需要将它们存储在DynamoDB中。那么哪一个是好的和正确的,请记住我希望DB增长? 如果这两种方法都不好,请建议这样做的好方法。

1 个答案:

答案 0 :(得分:1)

你应该尝试制作每个元素具有相同类型/结构的数组,因为它可以实现更好的搜索。

第二种解决方案不够具体。由于文本可以以“.jpg”结尾,因此您需要进行更精细的测试以确定它是否只是文本。文本甚至可能看起来很像URL ......

第一个更好,但拥有数字键并没有多大帮助。相反,你应该按类型组合,并使用该类型作为键名,并将实际值放在数组值中,如下所示:

{
    "content": {
        "images": ["image-link-here", "2nd-image-link"],
        "texts":  ["this is some text here"],
        "videos": ["video-link"]
    }
}

此结构应允许进行大多数实际搜索。

正如您在评论中指出的那样,您需要了解每个项目的顺序,然后我建议将内容定义为数组,其中该数组中元素的出现代表它们的顺序:

{
    "content": [
        { "image": "image-link-here" },
        { "text":  "this is some text here" },
        { "image": "2nd-image-link" },
        { "video": "video-link" }
    ]
}

或者,要使每个对象具有相同的属性:

{
    "content": [
        { "type": "image", "value": "image-link-here" },
        { "type": "text",  "value": "this is some text here" },
        { "type": "image", "value": "2nd-image-link" },
        { "type": "video", "value": "video-link" }
    ]
}

选择取决于您打算进行哪种查询。