如何通过JavaScript在JSON中构建此XML结构?

时间:2012-02-16 08:40:25

标签: javascript .net xml json json.net

我有这种XML结构,我希望使用JavaScript以JSON格式构建 - 如果可能的话,最好使用点符号。 :)

这是XML - 请注意这是一个伪结构,以保持简单! :)

<Items>
   <Item>
      <Name>Item 1</Name>
      <SubItems>
         <Item>
           <Name>Sub Item 1</Name>
         </Item>
      </SubItems>
   </Item>
   <Item>
      <Name>Item 2</Name>
   </Item>
</Items>

因此,当我将我的JSON转换为XML(在服务器上)时,输出应该如上所述。

我需要帮助开始这个。我谷歌了,我找不到任何关于如何做到这一点的例子。

提前致谢!

编辑:我正在使用NewtonSoft JSON for .NET将JSON转换为XML!

编辑2:好的,我找到了原始JSON结构来转换为XML - 这就是:

var json = {
        "Items":
            {
                "Item":
                    [   
                        {
                            "Name": "Test 1" ,
                            "SubItems":
                            {
                                "Item":
                                    [
                                        {
                                            "Name":"Test 1"
                                        },
                                        {
                                            "Name":"Test 2"
                                        }
                                    ]
                            }
                        },
                        {
                            "Name":"Test 2"
                        }
                    ]
            }
    };

这将产生与上面定义完全相同的XML结构。

现在,我将如何使用点符号

构建此结构

编辑3:在Nikhil&amp; amp;达林,我想通了,但这只能回答伪问题。但是我会将其标记为已回答并创建一个新问题。 :)

编辑4:我将扩展名发布到标记的答案。 :)

4 个答案:

答案 0 :(得分:3)

这应该这样做:

var items = [
              {"name":"Item 1","subitems":[
                {"name":"Subitem 1"}
              ]},
              {"name":"Item 2"}
            ];

答案 1 :(得分:2)

var items = [ ];

var item1 = { };
item1.Name = 'Item 1';
item1.SubItems = [ ];
var subItem = { };
subItem.Name = 'Sub Item 1';
item1.SubItems.push(subItem);
items.push(item1);

var item2 = { };
item2.Name = 'Item 2';
items.push(item2);

答案 2 :(得分:1)

var json = {};
json.Items = {};
json.Items.Item = new Array();

var item1 = {};
item1.Name = "Test 1"
item1.SubItems = new Array();

var subItem1 = {};
subItem1.Item = new Array();
subSubItem1 = {};
subSubItem1.Name = "Test 1";
subSubItem2 = {};
subSubItem2.Name = "Test 2";
subItem1.Item.push(subSubItem1);
subItem1.Item.push(subSubItem2);
item1.SubItems.push(subItem1);
var item2 = {};
item2.Name = "Test 2";
json.Items.Item.push(item1);
json.Items.Item.push(item2);

上述代码的输出是

{
    "Items": {
        "Item": [
            {
                "Name": "Test 1",
                "SubItems": [
                    {
                        "Item": [
                            {
                                "Name": "Test 1"
                            },
                            {
                                "Name": "Test 2"
                            }
                        ]
                    }
                ]
            },
            {
                "Name": "Test 2"
            }
        ]
    }
}

应该这样做:)

答案 3 :(得分:1)

Nikhil回答了这个问题,并获得了魔力。 :) - 我正在用我编写的代码扩展他的答案,以获得我正在寻找的结果。

在收到伪问题的答案后,我真正的问题是我的结构中有不同的项类型,它们共享了Items根节点。

这是我如何解决问题的一个伪示例。同样,Nikhil的答案是解决方案的基础,非常感谢他:)。

假设我们有一个根节点,水果,我们有不同类型的水果。说,苹果和香蕉。

以下是我如何获得JSON结构(最终,我需要的XML转换输出):

// Create the JSON Object
var json = {};
// Create the Fruits Objects (Our root)
json.Fruits = {};
for (var i = 0; i < 3; i++){ 
    // Pseudo condition
    if (i == 0 || i == 1) {
        // Make sure we have an Apple array
        if(json.Fruits.Apple == undefined)
            json.Fruits.Apple = [];
        json.Fruits.Apple.push({
             "Color": "Green"
        });
     } else {
        // Make sure we have a Banana array
        if (json.Fruits.Banana == undefined)
            json.Fruits.Banana = [];
        json.Fruits.Banana.push({
             "Color": "Yellow" 
        });
    }
}

这将输出以下JSON:

{"Fruits":
   {"Apple":
      [
       {"Color":"Green"},
       {"Color":"Green"}
      ],
    "Banana":
      [
       {"Color":"Yellow"}
      ]
   }
}

最终,以下XML:

<Fruits>
  <Apple>
    <Color>Green</Color> 
  </Apple>
  <Apple>
    <Color>Green</Color> 
  </Apple>
  <Banana>
    <Color>Yellow</Color> 
  </Banana>
</Fruits>