1

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

我有以下层次结构:

层次结构:

 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。

  • 参数取决于服务。

下图说明了这一点:

在此处输入图像描述

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

在 JSON 中表示此层次结构的最佳方式是什么?

4

6 回答 6

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%"
         },{...}
      ]
   }, {...}, {...}
]
于 2012-07-27T05:27:44.660 回答
2

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

[
    {
        "publish":{
             "id":1,
             "description": "Some description",
             "text": "Publish",
             "enabled": true,
             "params": [
                 {
                    "days": 7,
                    "description": "7 days",
                    "cost": 300
                 },.....//and so on
             ]
         }
    }
]
于 2012-07-27T05:33:05.140 回答
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": {
        ...
    }
}

其中:stateis 1:选中,0:未选中,-1:禁用

于 2012-07-27T05:33:34.270 回答
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% 来代表他们。您还必须处理时间单位(例如天和月)的多元化问题。

于 2012-07-27T05:36:22.173 回答
1
[{
 prop1 : value
 prop2 : {
     level2Prop : value1
     . 
     .         
  }
},
{
 ...
}]
于 2012-07-27T05:24:48.933 回答
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'}}
               }
       }
于 2012-08-01T11:59:16.200 回答