2016-11-09 2 views
-1

Я извлек некоторые данные из документа XML и назначил их на три переменные. Имя корневого элемента, массив, который содержит все имена дочерних элементов корня и второй массив с длиной этих дочерних узлов. Я хочу, чтобы преобразовать эти переменные в объект JSON таким образом:Соберите строки и массивы в JSON правильно

{ "root_name": { 
     "childName[0]": "lengthSubNodes[0]", 
     "childName[1]": "lengthSubNodes[1]", 
     "childName[2]": "lengthSubNodes[2]", 
} 

с этой функцией:

function XMLtoJSON(rootName,childNames,childNumbers){ 
      var xmlObject = {} 
      xmlObject[rootName] = {}; 
      for(var i = 0; i < childNames.length; i++){ 
       xmlObject[rootName][childNames[i]] = childNumbers[i]; 
      } 

     } 

Все работает отлично. Однако, когда речь идет о документе XML с детьми многих корневых с тем же именем и длиной они появляются только один раз, как это:

{ "catalog": { 
     "book": 6 
} 

и должны выглядеть следующим образом:

{ "catalog": { 
     "book":6, 
     "book":6, 
     "book":6 
} 

Вы знаете, как исправить Это?

+1

Я не думаю, что у вас могут быть избыточные ключи в одном и том же родительском атрибуте объекта - есть ли способ дать им уникальное значение ключа? – SachiDangalla

+1

Нам нужно знать, как вы хотите, чтобы это «исправлено». Как заявила СачиДангалла, у вас не может быть дубликатов ключей. Что вы хотите сделать с дополнительными данными? Одна из возможностей - создать массив со значениями. Но ** вам нужно выяснить, что вы хотите и рассказать нам. – Makyen

+0

Вы имеете в виду «объект Javascript», а не JSON? JSON - это строка с определенной формой, но она по-прежнему является строкой, а не сложным объектом, как вы описываете ... –

ответ

1

У вас не может быть нескольких ключей с одинаковым именем под одним родителем. Кроме того, узлы в xml имеют порядок, который теряется в js-карте. Поэтому, если вы хотите использовать утилиту xml для json, вам нужно создать json-схему. Вот упрощенный пример:

{ 
    name:  "catalog", 
    value:  null, 
    children: [ 
     { 
      name: "book", 
      value: 6 
     }, 
     { 
      name: "book", 
      value: 6 
     }, 
     { 
      name: "book", 
      value: 6 
     }, 
    ] 
}