了解JSON结构 - 属性和值

时间:2011-12-05 10:22:22

标签: javascript json

有些事困扰着我。我在一些应用程序/网站中使用过JSON,我们都喜欢它!然而,今天有些东西进入了我的脑海,我从未想过......看看下面的例子(这是从http://json.org/example.html获得的):

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}  

现在,如果将其表示为XML:我们将拥有以下内容:

<widget>
    <debug>on</debug>
    <window title="Sample Konfabulator Widget">
        <name>main_window</name>
        <width>500</width>
        <height>500</height>
    </window>
    <image src="Images/Sun.png" name="sun1">
        <hOffset>250</hOffset>
        <vOffset>250</vOffset>
        <alignment>center</alignment>
    </image>
    <text data="Click Here" size="36" style="bold">
        <name>text1</name>
        <hOffset>250</hOffset>
        <vOffset>100</vOffset>
        <alignment>center</alignment>
        <onMouseUp>
            sun1.opacity = (sun1.opacity / 100) * 90;
        </onMouseUp>
    </text>
</widget>

在查看JSON到XML转换时,我想知道是否有任何方法可以区分对(“key”:“value”)是否是标记的属性。例如,在我们的JSON上面

"window": {
            "title": "Sample Konfabulator Widget",
            "name": "main_window",

标题表示为窗口标记的属性,而name是它自己的标记,但是这在任何地方都没有表达(我可以看到)。

<window title="Sample Konfabulator Widget">
    <name>main_window</name>

为什么不显示为:

<window>
    <title>Sample Konfabulator Widget</title>
    <name>main_window</name>

如果一对是父标签或子标签的属性,我可以指定它们的方式吗?对不起,如果我的措辞不好或者我没有很好地解释自己。

7 个答案:

答案 0 :(得分:3)

有些人倾向于使用名为&#34; @ attributes&#34;的常规属性,赋予它&#34;属性容器&#34;的特殊含义,但该名称对JSON没有任何特殊含义规格本身。

要回答你的问题,没有办法区分对&#34;键&#34;:&#34;值&#34;和属性,只是因为json不支持属性。

这类问题通常来自那些忘记XML中的M代表&#34;标记&#34;的人,这是一种获取纯文本和添加标记以创建结构化文本的方式。 我猜这种误解来自于将JSON推广为a fat-free alternative to XML,而实际上XML是一种标记语言,而JSON是一种数据交换格式。没有人能真正替代对方。

混合内容是XML显示其力量的背景之一。

<p>What a <b>mess</b> we're in.</p>

试图将其表达为JSON,您会意识到它并非为该工作而设计。

另一方面,XML作为数据交换器可能非常有用,但它不是它的设计目标,也不是它的主要优势。

答案 1 :(得分:2)

这取决于您的转换器。

Json与XML 1-1不匹配。

简单地说,json只是一种表示字典嵌套的字典和数组的方法。

答案 2 :(得分:1)

某些转换器正在使用某些默认关键字,例如'title'和'src',这些关键字正在转换为属性而不是字段。有些转换器没有。

答案 3 :(得分:1)

不在JSON内。我假设您使用某种自动方式从JSON转换为XML;根据正在进行转换的程序,您可以使用注释。另见例如。 http://en.wikipedia.org/wiki/JSON为同一个JSON提供了两个XML示例。

没有关于如何“假设”将JSON映射到XML的正式规范(我知道)。两者都是形式化的,结构化的方式来表示数据,但留下了如何代表数据的具体部分。因此,这取决于您希望如何表示数据,以及您的应用程序可以或不可以处理的内容。

答案 4 :(得分:0)

我刚刚在json网站上阅读了这个确切的例子并且认为“地球上的标题是怎么一个属性没有任何意义表明它应该。我认为这个例子本身并没有错 - 但我不知道为什么有人没有提供了一个简单的答案?

答案 5 :(得分:0)

我认为(有些)处理'title'和'description'(以及'default')被认为是JSON中的关键字。 JSON并不真正以这种方式处理属性。我认为唯一的方法是添加另一个封装对象,只是为了将'title'与其他条目分开。我认为JSON努力使'标题'和'描述'与众不同是为了解决这个问题。 (不是很好的答案,我知道......)

https://spacetelescope.github.io/understanding-json-schema/reference/generic.html

答案 6 :(得分:0)

对象&#34;标题&#34;在&#34;小部件/窗口&#34;将生成一个新元素。它永远不会进入另一个元素的属性。对此非常肯定。