在服务器上存储嵌套的JSON

时间:2014-04-09 14:44:29

标签: javascript php json

我将(模拟)产品数据硬编码到JSON文件中,用于在我的应用程序中生成“目录”页面。但是,最终计划是允许用户通过CMS样式的管理面板添加新产品。

显然我需要这些数据是持久的。显而易见的选择是使用MySQL或其他一些数据库,但由于这是一个非常复杂的数据结构,有很多嵌套我无法想象如何可以无痛地实现。我可以简单地将JSON存储在服务器上的文本文件中,但是我失去了操作它的能力,并且每次我做出更改时都必须发送整个集合。然后,这只会是人们添加和删除产品,所以也许不会那么糟糕。也许我可以用PHP解码JSON,对其进行操作,然后将其重新序列化为JSON并将其保存到文本文件中。

对不起,我在这里闲聊。您认为我最好的选择是什么?

{
        currency: currency,
        currencySymbol: CurrencySymbol(currency),
        shoes: {
            title: 'Shoes',
            items:[ 
                [
                    {
                        name: 'Light Shoes', 
                        price: 99.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    },{
                        name: 'Dark Shoes', 
                        price: 59.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    },{
                        name: 'Brown Shoes',
                        price: 5.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    }
                ],[
                    {
                        name: 'Gold Shoes',
                        price: 999.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    },{
                        name: 'Dark Shoes', 
                        price: 59.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    },{
                        name: 'Brown Shoes',
                        price: 5.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/shoes/darkshoes.jpg'
                    }
                ]
            ]
        },
        dance: {
            title: 'Dance Gear',
            items: [ 
                [
                    {
                        name: 'Cool Cap', 
                        price: 99.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    },{
                        name: 'Baggy Pants', 
                        price: 59.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    },{
                        name: 'Jacket',
                        price: 5.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    }
                ],[
                    {
                        name: 'T-Shirt',
                        price: 99.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    },{
                        name: 'Hip-Hip Hoodie', 
                        price: 59.99, 
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    },{
                        name: 'Belt',
                        price: 5.99,
                        description: "Donec eu lacus vel sapien luctus fermentum. Nulla consequat viverra volutpat. Phasellus et sagittis mauris.", 
                        imgUrl:'./catalogue/dance/dance.jpg'
                    }
                ]
            ]

        }
    }

1 个答案:

答案 0 :(得分:2)

使用 .json 扩展名存储json对象。这里不需要文本文件,因此无需继续努力发送正确的标题。

对于持久性部分:在数据库表中,只引用本地文件系统上的json文件以及您需要的其他信息(更新时间等)。

示例表可能如下所示:

documents(id:pk, file, created_at, updated_at)

(当然你也可以将原始的json字符串存储在你的表中,但是使用不适合存储json的数据类型会遇到危险,因此无法保存所有数据)

然而,这种方法仅适用于需要使用关系数据库系统


但是,更好的方法是使用文档数据库系统,例如mongoDB,这也是评论中推荐的。这绝对值得一看,但如果你来自关系dbms背景,它起初可能有点尴尬。