如何在JSON中存储层次结构?

时间:2012-07-27 05:20:30

标签: javascript database json structure

如何在JSON中存储hierarhy?

我有以下层次结构:

Hierarhy:

 1:Publish, "Long description of Publish service", is_default
     7: 7 days,  150
    14:14 days,  600, +200%
    30:1 month, 1350, +300%
 2:Premium, "Long description..."
    14:14 days,  150
    30:1 month,  600
    60:2 month,  1500
 3:SuperPremium, "Long description...", disabled
    30:1 month,  150
    60:2 month,  600
    90:3 month,  1500, disabled

其中:

  • “Publish,Premium,SuperPremium” - 是服务。 1,2,3 - 服务ID。

  • “7天,14天,28天” - 是服务参数。 7,14,28 - 参数id。

  • 参数取决于服务。

下图说明了它:

enter image description here

需要JSON格式的精简和可用结构。

在JSON中表示此hierarhy的最佳方法是什么?

6 个答案:

答案 0 :(得分:3)

我会做类似的事情:

[
   {
      "Service":"Publish",
      "Desc":"Long description of Publish serive",
      "Params":[
         {
            "Days":"7",
            "Desc":"7 Days",
            "Cost":150
         },
         {
            "Days":"14",
            "Desc":"14 Days",
            "Cost":600,
            "Extra":"+200%"
         },{...}
      ]
   }, {...}, {...}
]

答案 1 :(得分:2)

JSON可以像编写任何其他JavaScript对象一样编写。以您的示例为例的示例是

[
    {
        "publish":{
             "id":1,
             "description": "Some description",
             "text": "Publish",
             "enabled": true,
             "params": [
                 {
                    "days": 7,
                    "description": "7 days",
                    "cost": 300
                 },.....//and so on
             ]
         }
    }
]

答案 2 :(得分:2)

{
    "publish": {
        "id": 1,
        "desc": "Long description of Publish service",
        "state": 1,
        "params": [
            {
                "key": 7,
                "val": 100,
                "desc": "7 days",
                "pct": 0,
                "enabled": true
            },
            {
                "key": 14,
                "val": 600,
                "desc": "14 days",
                "pct": 200,
                "enabled": true
            },
            {
                "key": 30,
                "val": 1350,
                "desc": "30 days",
                "pct": 300,
                "enabled": true
            }
        ]
    },
    "premimum": {
        ...
    },
    "superPremimum": {
        ...
    }
}

其中:state为1:已选中,0:未选中,-1:已禁用

答案 3 :(得分:2)

我的方法:

{
        'data' : [
        {
            'ServiceId' : 1
            'Name': 'Publish',
            'LongName': 'Long description of Publish service',
            'OptionalFlag': 'default',
            'Parameters': [
                { 'Id': 7, 'Amount': 7, 'Unit': 'days', 'Cost': 150, 'Surcharge': 0.0 },
                { 'Id': 14, 'Amount': 14, 'Unit': 'days', 'Cost': 600, 'Surcharge': 2.0 },
                { 'Id': 30, 'Amount': 1, 'Unit': 'month', 'Cost': 1350, 'Surcharge': 3.0 },
            ]
        },
        {
            'ServiceId' : 2
            'Name': 'Premium',
            'LongName': 'Long description of Publish service',
            'OptionalFlag': 'disabled',
            'Parameters': [
                { 'Id': 14, 'Amount': 14, 'Unit': 'days', 'Cost': 150, 'Surcharge': 0.0 },
                { 'Id': 30, 'Amount': 1, 'Unit': 'month', 'Cost': 600, 'Surcharge': 0.0 },
                { 'Id': 60, 'Amount': 2, 'Unit': 'month', 'Cost': 1500, 'Surcharge': 0.0 },
            ]
        },
        {
            'ServiceId' : 3
            'Name': 'SuperPremium',
            'LongName': 'Long description of Publish service',
            'OptionalFlag': 'disabled',
            'Parameters': [
                { 'Id': 30, 'Amount': 1, 'Unit': 'month', 'Cost': 150, 'Surcharge': 0.0 },
                { 'Id': 60, 'Amount': 2, 'Unit': 'month', 'Cost': 600, 'Surcharge': 0.0 },
                { 'Id': 90, 'Amount': 3, 'Unit': 'month', 'Cost': 1500, 'Surcharge': 0.0 },
            ]
        }
        ]
}

修改:(格式详情)

您需要在代码中处理一些格式化细节,并且没有任何结构可以绕过它。例如如何存储百分比附加值,然后应用数学来计算总数。我喜欢用1.0 = 100%亲自代表他们。您还必须使用时间单位(例如天和月)来处理复数问题。

答案 4 :(得分:1)

[{
 prop1 : value
 prop2 : {
     level2Prop : value1
     . 
     .         
  }
},
{
 ...
}]

答案 5 :(得分:0)

其中一个想法是:

       // default values
       {
        service:'publish', 
        period:7
       }

       // data
       {
        service:{  
                 'publish':{title:'Publish'}, 
                 'premium': {title:'Premium',    description: '...'}, 
                 'superpremium':{title:'SuperPremium', description: '...', disabled}
               },
        period:{ 
                'publish': {
                          7:{title: '7 days'}, 
                         14:{title:'14 days'}, 
                         28:{title:'28 days'}},
                'premium': {
                         14:{title:'14 days'}, 
                         28:{title:'28 days'}, 
                         36:{title:'36 days'}},
                'superpremium': {
                         28:{title:'28 days'}, 
                         60:{title:'60 days'}, 
                         90:{title:'90 days'}}
               }
       }