2012-02-16 78 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>