【问题标题】:How can I build this XML structure in JSON through JavaScript?如何通过 JavaScript 在 JSON 中构建这个 XML 结构?
【发布时间】:2012-02-16 08:40:25
【问题描述】:

我有这个 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(在服务器上)时,输出应该像上面那样。

我需要帮助才能开始。我在 Google 上四处搜索,但找不到任何有关如何执行此操作的示例。

提前致谢!

编辑:我正在使用 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 & Darin 的帮助下,我想通了,但这只能回答伪问题。但是,我会将其标记为已回答并创建一个新问题。 :)

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

【问题讨论】:

    标签: javascript .net xml json json.net


    【解决方案1】:

    应该这样做:

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

    【讨论】:

    • 您可以通过调用items[i].name 获取特定项目的名称,其中i 是项目的索引。同样,子项的名称可以用items[i].subitems[j].name
    • 这会在转换时生成完全相同的 XML 结构吗?那么, 不会是 和 ?
    • 这完全取决于您的服务器。例如,如果您使用 Ruby on Rails 之类的东西,您可以将对象渲染为 XML 或 JSON,您不必担心渲染的具体工作方式。为了更好地理解您的问题,我必须查看服务器端代码。
    • 对不起,我可能不太明白。您想使用 Javascript 将 JSON 对象转换为 XML 吗?最初的谷歌结果将我带到this handy jQuery plugin
    • 我正在使用 NewtonSoft JSON 将 JSON 转换为 XML - 我希望将 JSON 字符串发送到服务器,并在那里将其转换为 XML。然而,输出结构与 XML 示例中指定的完全相同是非常重要的。 :)
    【解决方案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);
    

    【讨论】:

      【解决方案3】:
      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"
                  }
              ]
          }
      }
      

      应该这样做:)

      【讨论】:

      • 啊,刚刚看到您的编辑。现在我知道你所说的动态是什么意思了;)我的代码实际上是静态的。但我希望它会有所帮助!
      • 接受,因为这确实回答了所提出的问题。 :)
      • 如果您有兴趣,我发布了我的完整答案,但是您的答案仍然标记为答案 ;)
      【解决方案4】:

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

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

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

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

      以下是我获得 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 2021-05-31
        • 1970-01-01
        • 2021-12-28
        相关资源
        最近更新 更多