JSON分层对象,以减少重复数据

时间:2012-05-18 23:26:45

标签: json data-structures

我正在使用.json文件来保存应用程序的字体/文本信息。现在我正在添加不同的语言,我需要能够为某些字体指定不同的大小,因为该语言中单词的大小不同,例如德语单词往往比英语长,所以我可能想要一个较小的字体。

我的问题是我的.json文件中会有大量重复数据,因为大多数字体对于每种语言都保持不变。以下是我想以某种方式减少重复数据的示例,我只是不知道如何格式化我的.json文件(注意我已经删除了很多细节,所以这将更容易阅读):< / p>

"styles":
{
    "en":
    {
        "main_title" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 25,
        },
        "heading" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 18,
        },
    },
    "de":
    {
        "main_title" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 25,
        },
        "heading" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 16,
        },
    },
    "fr":
    {
        "main_title" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 25,
        },
        "heading" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 18,
        },
    }
}

请注意,在上面的示例中,我有三种语言,并且所有使用相同的字体信息,但使用较小的“heading”字体的deutsche除外。我想做的是这样的事情:

"styles":
{
    "en", "de", "fr":
    {
        "main_title" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 25,
        },
        "heading" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 18,
        },
    },
    "de":
    {

        "heading" :
        {
            "font" : "font://verdana-bold.ttf",
    "size" : 16,
        },
    },
}

在这个例子中,我让所有三种语言使用相同的信息,但能够在deutsche语言字体中定义一个更改。显然,我的第二个例子将无法正确阅读,因为它的语法不正确,但希望这可以解决我想要实现的目标。 JSON中是否有任何语法可以让我做这样的事情?

1 个答案:

答案 0 :(得分:1)

我不相信JSON会这样做,但你可以有一个'默认'对象,这些数据的使用者可以查看其他语言对象中缺少的任何值:

"styles": {
    "default": {
        "main_title" : {
            "font" : "font://verdana-bold.ttf",
            "size" : 25,
        },
        "heading" : {
            "font" : "font://verdana-bold.ttf",
            "size" : 18,
        },
    },
    "de": {
        "heading" : {
            "size" : 16,
        }
    }
}

如果您需要指定允许哪些语言,只需将其添加为对象的另一个属性:

"styles": {
    "languages": ["en", "de", "fr"],
    ...
}
相关问题