我正在为我的webapp设计一个API.
我想只支持JSON响应(而不是XML),因为它更加简化.
但我刚刚碰到这个XML:
<folders>
<folder id="123" private="0" archived="0" order="1">Shopping</folder>
</folders>
Run Code Online (Sandbox Code Playgroud)
我想知道相应的JSON是怎样的.我觉得,在这种情况下,XML会更紧凑.
谢谢,丹
小智 19
也许:
{
"folders": [
{ "id":123, "private":0, "archived":0, "order":1, "title":"Shopping" },
...
]
}
Run Code Online (Sandbox Code Playgroud)
因为XML和JSON之间没有确切的对应关系,所以您可以自由(例如必须定义)两个数据结构如何映射.例如,在上文中,"folder"元素隐含在"folders"数组中的嵌套对象中.
这可以扩展为:
"folders": [{"folder": { .... }]
Run Code Online (Sandbox Code Playgroud)
等等,但仍然存在无法像XML一样捕获内容+属性的问题.在任何情况下,您的数据结构 - > JSON | XML序列化程序可能以特定方式工作(请,请使用库,而不是"手动"JSON-string-munging).那是; XML和JSON的格式应该由数据结构统一指定(以某种方式)进行传输.
Sup*_*ion 15
此方法支持对XML的逆转换:
{
"folders": {
"folder":{
"@": {
"id": "123",
"private": "0",
"archived": "0",
"order": "1"
},
"#": "Shopping"
}
}
}
Run Code Online (Sandbox Code Playgroud)
它与js2xmlparser一起正常工作.
当XML DOM表示为JSON DOM(当然具有属性)时,有一种称为badgerfish的JSON表示法/约定试图标准化(至少它自己的术语)保留大多数低级XML语义的方式(参见http:// badgerfish.ning.com/).
因此,您可以轻松地将badgerfishied-json表示形式转换回XML表示形式,您仍然可以使用您喜欢的XML工具集(对我来说是XPATH/QUERY表达式和工具)来处理结构.
它也很容易记住语法规则(总共9个),如:"属性进入名称以@开头的属性".您可以在文本编辑器中处理badgerfishied-json,而不会不必要地重载您的神经电路.通常你可以在第一关中记住它们.
YQL如何呈现XML和相应的JSON的示例.无需了解任何YQL明白这一点,但如果你有兴趣你可以检查YQL控制台,并尝试一下自己在YQL控制台
XML
<results>
<a href="/">NBA</a>
<a class="topnav" href="#">TEAMS</a>
<a href="/teams/">Teams</a>
<a href="/hawks/">Atlanta</a>
Run Code Online (Sandbox Code Playgroud)
JSON
"results": {
"a": [
{
"href": "/",
"content": "NBA"
},
{
"class": "topnav",
"href": "#",
"content": "TEAMS"
},
{
"href": "/teams/",
"content": "Teams"
},
{
"href": "/hawks/",
"content": "Atlanta"
},
Run Code Online (Sandbox Code Playgroud)
小智 7
在我看来,XML 和 JSON 之间最精确的对应关系需要将 XML 节点表示为一个三元组(即数组):[名称、属性、值],名称是字符串,属性是一个对象,以属性名称作为键和属性值作为(字符串)值,并将字符串值(对于原子值)或此类三元组的数组。
通过这样的映射 JSON 等价物
<folders>
<folder id="123" private="0" archived="0" order="1">Shopping</folder>
</folders>
Run Code Online (Sandbox Code Playgroud)
将是
[ "folders",
{},
[
[ "folder",
{ "id": "123",
"private": "0",
"archived": "0",
"order": "1"
},
"Shopping"
]
]
]
Run Code Online (Sandbox Code Playgroud)
实际上,这种映射背后的想法是:
1) XML-JSON 转换是可逆的。2)保留子节点的“兄弟”关系
同时属性节点和值节点之间的区别在这里是明确的。
是否有意义?它是否证明了复杂性开销的合理性?
| 归档时间: |
|
| 查看次数: |
57164 次 |
| 最近记录: |