我正在使用ClusterPoint数据库,并且我导入了包含标签和属性的XML文档:
<db>
<document>
<id>1</id>
<name lang="en">John</name>
<name lang="ru">Джон</name>
</document>
<document>
<id>2</id>
<name lang="en">Bill</name>
<name lang="ru">Билл</name>
</document>
</db>当我使用JSON RestAPI检索我的文档时,我得到了以下内容:
"documents": [
{
"id": "1",
"name": [
"John",
"Джон"
]
},
{
"id": "2",
"name": [
"Bill",
"Билл"
]
}]有没有可能以某种方式获取属性?
发布于 2015-07-15 17:45:54
前段时间我也遇到了同样的问题。如果(到目前为止)还没有办法在JSON中获取属性,我也不会感到惊讶,因为文档中没有列出这样的场景。
这不仅仅是有类似问题的聚集点。例如,如果您需要特定的XML,使用simplexml将其加载到PHP中,然后将其编码为JSON,则属性也将被删除。XML不能映射到JSON 1:1,模棱两可的东西需要特别小心,否则就会被丢弃。没有关于如何转换的足够信息
<name lang="en">John</name>
<name lang="ru">Джон</name>而且在如何做事情上没有一个共同的标准。很明显,这应该导致数组。但是如何构建它呢?我们可以将每个元素转换为对象,然后将对象存储在数组中。但是,应该给值什么键呢?类似这样的事情可能是合理的:
{ "name": [
{"lang": "en", "name": "John"},
{"lang": "ru", "name": "Джон"}
]}但是我们再一次遇到了问题,很难将数据转换回来,因为我们不知道这是否来自属性。我们可以使用不同的设置:
{ "name": [
{"@lang": "en", "name": "John"},
{"@lang": "ru", "name": "Джон"}
]}那么@将表明这来自attribute。或者像这样:
{ "name": [
{"@lang": "en", "#value": "John"},
{"@lang": "ru", "#value": "Джон"}
]}指示#value始终保存标记中的值。总而言之,看起来目前还没有办法在JSON中获取属性。如果有-来自Clusterpoint的男孩/女孩应该在他们的文档中添加详细的信息。然而,如果真的没有办法获得属性,那么我打赌在未来的版本中,将会有一些记录在案的标准供Clusterpoint使用。
虽然没有文档标准说明Clusterpoint如何处理XML属性到JSON的转换,但您确实需要属性--只要使用XML即可。或者,如果需要JSON,可以将文档重塑为不需要属性的内容。
https://stackoverflow.com/questions/31420115
复制相似问题