使用JSONIX

时间:2015-06-28 16:01:11

标签: javascript json xml jsonix

是否有可能使用JSONIX从XML模式生成空对象?我通常在创建适合XML模式的新JS对象时遇到问题。因此,这将非常有用。任何一个例子都将非常感激。 我尝试了以下方法来创建一个新对象。在这种情况下,NodeType是一个复杂的类型名称。

{name: {localpart: nodeType}, value:{}};

然后我尝试填充值(我遍历模式映射以找出每种类型的所有可能属性)。但是,我得到了以下错误对我没有多大帮助:元素[ELEMNAME]在此上下文中未知

如果无法做到这一点,我如何创建一个应该符合模式的新对象?

非常感谢任何想法!

编辑: 好的,这里有一个更具体的例子:

"NodeType":{
        "type":"object",
        "title":"NodeType",
        "properties":{
            "id":{
                "title":"id",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"id",
                    "namespaceURI":""
                }
            },
            "x":{
                "title":"x",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"x",
                    "namespaceURI":""
                }
            },
            "y":{
                "title":"y",
                "allOf":[
                    {
                        "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/decimal"
                    }
                ],
                "propertyType":"attribute",
                "attributeName":{
                    "localPart":"y",
                    "namespaceURI":""
                }
            }

这是我的XSD文件中的一个JSON Schema摘录。我想要的是一个看起来像这样的对象:

{id:"", x: "", y: ""}

目标是将此对象编组为XML。

2 个答案:

答案 0 :(得分:2)

免责声明:我是Jsonix的作者。

如果我的问题是正确的,你会问,你怎么能构建一个可以用Jsonix编组的JS对象。

大多数人所做的诀窍是采用XML“它应该是这样的”,解组它和日志JSON.stringify(myObject, null 2),就像那样。然后你会看到适当的JS应该是什么样子。

您还可以做generate an JSON Schema out of your XML Schema。这将为您提供this one之类的JSON模式,提供编组所需的JSON的完整描述。

我还考虑实现类似TypeScript类的生成,但那是未来的音乐。

<强>更新

对不起,我还不太确定你的问题是什么。您添加了一个JSON模式,该模式定义了NodeType复杂类型,其中包含字符串id和小数xy属性。

你问的是这个空对象是什么。好吧,复杂类型的空对象只是{} 具有值的对象例如是{id:"someId", x: 4, y:2}

但是在XML中你不能编组只是一个复杂的类型,你编组一个复杂类型的元素。其中以{ name: ..., value: ... }的形式表示。所以你可能会有类似的东西:

{
  "name": {
    "namespaceURI": "uri",
    "localPart": "root"
  },
  "value": {
    "id" : "someId",
    "x" : 4,
    "y" : 2,
    "TYPE_NAME": "NodeType"
  }
}

希望这有帮助。

答案 1 :(得分:1)

为进一步澄清这个问题,您需要使用:Java语言是一种松散类型的语言。即使JS类具有原型结构,但JS对象仅在其成员中填充值时才具有该结构。因此,Jsonix从XSD生成JS映射,然后从该映射实例化一个新JS对象的JS脚本不会创建未填充的结构。只有在对象中填充值时,才会创建结构。可以通过在代码中直接给新对象分配值来进行填充,然后在其成员添加到复杂的整体JS对象中后,使用XSD或它的文档作为指导,向下钻取其包含的成员树以填充每个成员。或者,可以通过JSON块填充复杂的整个JS对象,在这种情况下,可以根据Jsonix未编组的复杂对象的XML生成JSON。解封(和任何封送)可以由Jsonix执行。最重要的是,必须将要取消/封送的复杂对象的现有XML或隐式结构中的逐行分配的代码提供给使用Jsonix作为其功能的代码。这与Java(例如JAXB)不同,在XSD中,XSD可以用于生成具有其所有结构的新复杂对象,然后该复杂对象由Java程序填充(通过树中的分配或通过从XML解编)。