2012-02-16 81 views
1

我有这个XML结构,我希望使用JavaScript构建JSON格式 - 如果可能,最好使用点符号。 :)如何通过JavaScript在JSON中构建此XML结构?

这里是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用于.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 & Darin的帮助下,我找到了答案,但是这只能回答伪问题。不过,我会将其标记为已回答并创建一个新问题。 :)

编辑4:我贴我的扩展标记的答案。 :)

回答

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" 
      } 
     ] 
    } 
} 

应该这样做:)

+0

啊,只是看到了你的编辑。现在我知道你的意思是动态的;)我的代码实际上是静态的。但我希望它有帮助! – Nikhil 2012-02-16 10:23:27

+0

已接受,因为这样可以回答所问的问题。 :) – Jeff 2012-02-16 10:26:57

+0

如果你有兴趣,我贴我的完整的答案,但是你撑标记为答案;) – Jeff 2012-02-16 10:58:06

3

这应该这样做:

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

您将通过调用'items [i] .name'来获取特定项目的名称,其中'i'是i项目的指标。类似地,子项的名称可以与'项被撷取[I] .subitems [j]的.name' – 2012-02-16 08:46:31

+0

并转换时,这将产生精确的相同的XML结构?所以,不会是<0>和<1>? – Jeff 2012-02-16 08:49:04

+0

这一切都取决于您的服务器。例如,如果您使用的是Ruby on Rails之类的东西,则可以将对象呈现为XML或JSON,并且不必担心呈现效果如何。为了更好地理解你的问题,我必须看到服务器端代码。 – 2012-02-16 08:51:30

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); 
1

尼基尔回答问题,并得到了魔力滴答声。 :) - 我用我写的代码扩展他的答案以获得我期待的结果。

我的真正问题是,在收到伪问题的答案后,我在我的结构中有不同的项目类型,它们都共享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>