有些事困扰着我。我在一些应用程序/网站中使用过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>
如果一对是父标签或子标签的属性,我可以指定它们的方式吗?对不起,如果我的措辞不好或者我没有很好地解释自己。
答案 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;将生成一个新元素。它永远不会进入另一个元素的属性。对此非常肯定。