2014-12-07 4 views
0

У меня есть JSON-файл, который я хочу преобразовать в XML в JAVA для обработки некоторых вещей с исходящей XML-структурой. Мой файл выглядит следующим образом:Создать XML из JSON

{ 
    "published" : "2014-04-15T12:00:13.760Z", 
    "actor" : { 
     "objectType" : "person", 
     "id" : "a00906a9-d3e3-40b5-8ef2-9e1051828c09", 
     "displayName" : "Ashley Wessels" 
    }, 
    "verb" : "floating_run", 
    "object" : { 
     "objectType" : "experiments", 
     "id" : "e9d9f71a-6c9e-4724-98d1-32dee57bb015", 
     "content" : [ 
      { 
       "mass" : 10, 
       "volume" : 392.2, 
       "density" : 0.025497195308516064, 
       "fluid" : 1 
      }, 
      { 
       "mass" : 150, 
       "volume" : 150, 
       "density" : 1, 
       "fluid" : 1 
      }, 
      { 
       "mass" : 50, 
       "volume" : 50, 
       "density" : 1, 
       "fluid" : 1 
      }, 
      { 
      "mass" : 50, 
      "volume" : 100, 
      "density" : 0.5, 
      "fluid" : 1 
      }, 
      { 
      "mass" : 100, 
      "volume" : 50, 
      "density" : 2, 
      "fluid" : 1 
      }, 
      { 
      "mass" : 400, 
      "volume" : 300, 
      "density" : 1.3333333333333333, 
      "fluid" : 1 
      } 
     ] 
    }, 
    "target" : { 
     "objectType" : "experiment", 
     "id" : "9383fbbe-e071-49b2-9770-46ddc4f8cd6e", 
     "displayName" : "Grundel experiment" 
    }, 
    "generator" : { 
     "objectType" : "application", 
     "url" : "splash", 
     "id" : "04123e9e-14d0-447b-a851-805b9262d9a6", 
     "displayName" : "splash" 
    }, 
    "provider" : { 
     "objectType" : "study", 
     "url" : "http://go-lab.gw.utwente.nl/experiments/siswagrundel/", 
     "id" : "0f8184db-53ba-4868-9208-896c3d7c25bb", 
     "displayName" : "SiswaGrundel" 
    }, 
    "publishedClient" : "2014-04-15T12:17:03.902Z", 
    "publishedServer" : "2014-04-15T12:00:13.760Z", 
    "_id" : "534d1f4ddd5532e74400019f" 
} 

Я использовал библиотеку org.json, а также попробовал некоторые другие библиотеки, как отстрелить, чтобы создать XML-файл из этого парня, но большую часть `XML.toString()» methodd не могут обрабатывать JSONArray в этом файле, он просто создает странный вывод котировок и т. д. Есть ли библиотека, которая может обрабатывать этот тип структуры JSON? Если нет: как мне обращаться с этим типом файла?

** EDIT **

Я посмотрел в Интернете и нашел этот файл, который кажется та же структура, что и моя. Но моя закодирована неправильно, кто-нибудь знает почему?

Здесь:

{"menu": { 
    "header": "SVG Viewer", 
    "items": [ 
     {"id": "Open"}, 
     {"id": "OpenNew", "label": "Open New"}, 
     null, 
     {"id": "ZoomIn", "label": "Zoom In"}, 
     {"id": "ZoomOut", "label": "Zoom Out"}, 
     {"id": "OriginalView", "label": "Original View"}, 
     null, 
     {"id": "Quality"}, 
     {"id": "Pause"}, 
     {"id": "Mute"}, 
     null, 
     {"id": "Find", "label": "Find..."}, 
     {"id": "FindAgain", "label": "Find Again"}, 
     {"id": "Copy"}, 
     {"id": "CopyAgain", "label": "Copy Again"}, 
     {"id": "CopySVG", "label": "Copy SVG"}, 
     {"id": "ViewSVG", "label": "View SVG"}, 
     {"id": "ViewSource", "label": "View Source"}, 
     {"id": "SaveAs", "label": "Save As"}, 
     null, 
     {"id": "Help"}, 
     {"id": "About", "label": "About Adobe CVG Viewer..."} 
    ] 
}} 

Предусматривалось первоначально Bei org.json.

+0

Вы пропускаете шаг, отобразить его на объект Java, а затем карту, что к xml-файл. Я не верю, что есть один способ решения от json до xml напрямую. –

+0

Эй, это не причина. Я решил проблему тем временем, и я думаю, что это ошибка API org.json. –

+0

О, интересно, не возражаете ли вы опубликовать свой ответ? это может пригодиться, и если он плохо проголосует за него, –

ответ

1

Причина, по которой узел xml не отображался правильно, - это имя JSONArray. По какой-то причине он отображается правильно, если я переименую JSONArray с «content» на «_content» или что-то еще.

Для меня это похоже на ошибку org.json.

Код, используемый здесь:

Scanner scan = new Scanner(new File(jsonFile)); 
    String jsonData = ""; 
    while (scan.hasNext()) { 
     jsonData += scan.nextLine();// + "\n"; 
    } 
    scan.close(); 

    JSONObject json = new JSONObject(jsonData); 

    String xml = org.json.XML.toString(json); 

    System.out.println(xml); 

Просто переименованы JSONArray решить эту проблему, как я уже говорил раньше. После переименования выход выглядит следующим образом:

<actor><displayName>Ashley Wessels</displayName><id>a00906a9-d3e3-40b5-8ef2-9e1051828c09</id><objectType>person</objectType></actor><publishedClient>2014-04-15T12:17:03.902Z</publishedClient><provider><displayName>SiswaGrundel</displayName><id>0f8184db-53ba-4868-9208-896c3d7c25bb</id><url>http://go-lab.gw.utwente.nl/experiments/siswagrundel/</url><objectType>study</objectType></provider><verb>floating_run</verb><generator><displayName>splash</displayName><id>04123e9e-14d0-447b-a851-805b9262d9a6</id><url>splash</url><objectType>application</objectType></generator><publishedServer>2014-04-15T12:00:13.760Z</publishedServer><published>2014-04-15T12:00:13.760Z</published><_id>534d1f4ddd5532e74400019f</_id><object><id>e9d9f71a-6c9e-4724-98d1-32dee57bb015</id><_content><volume>392.2</volume><density>0.025497195308516064</density><mass>10</mass><fluid>1</fluid></_content><_content><volume>150</volume><density>1</density><mass>150</mass><fluid>1</fluid></_content><_content><volume>50</volume><density>1</density><mass>50</mass><fluid>1</fluid></_content><_content><volume>100</volume><density>0.5</density><mass>50</mass><fluid>1</fluid></_content><_content><volume>50</volume><density>2</density><mass>100</mass><fluid>1</fluid></_content><_content><volume>300</volume><density>1.3333333333333333</density><mass>400</mass><fluid>1</fluid></_content><objectType>experiments</objectType></object><target><displayName>Grundel experiment</displayName><id>9383fbbe-e071-49b2-9770-46ddc4f8cd6e</id><objectType>experiment</objectType></target> 

Перед переименованием это выглядело так:

<actor><displayName>Ashley Wessels</displayName><id>a00906a9-d3e3-40b5-8ef2-9e1051828c09</id><objectType>person</objectType></actor><publishedClient>2014-04-15T12:17:03.902Z</publishedClient><provider><displayName>SiswaGrundel</displayName><id>0f8184db-53ba-4868-9208-896c3d7c25bb</id><url>http://go-lab.gw.utwente.nl/experiments/siswagrundel/</url><objectType>study</objectType></provider><verb>floating_run</verb><generator><displayName>splash</displayName><id>04123e9e-14d0-447b-a851-805b9262d9a6</id><url>splash</url><objectType>application</objectType></generator><publishedServer>2014-04-15T12:00:13.760Z</publishedServer><published>2014-04-15T12:00:13.760Z</published><_id>534d1f4ddd5532e74400019f</_id><object><id>e9d9f71a-6c9e-4724-98d1-32dee57bb015</id>{&quot;volume&quot;:392.2,&quot;density&quot;:0.025497195308516064,&quot;mass&quot;:10,&quot;fluid&quot;:1} 
{&quot;volume&quot;:150,&quot;density&quot;:1,&quot;mass&quot;:150,&quot;fluid&quot;:1} 
{&quot;volume&quot;:50,&quot;density&quot;:1,&quot;mass&quot;:50,&quot;fluid&quot;:1} 
{&quot;volume&quot;:100,&quot;density&quot;:0.5,&quot;mass&quot;:50,&quot;fluid&quot;:1} 
{&quot;volume&quot;:50,&quot;density&quot;:2,&quot;mass&quot;:100,&quot;fluid&quot;:1} 
{&quot;volume&quot;:300,&quot;density&quot;:1.3333333333333333,&quot;mass&quot;:400,&quot;fluid&quot;:1}<objectType>experiments</objectType></object><target><displayName>Grundel experiment</displayName><id>9383fbbe-e071-49b2-9770-46ddc4f8cd6e</id><objectType>experiment</objectType></target> 
+0

, вероятно, не ошибка, а скорее соглашение о сериализации, спасибо за обмен tho. –

Смежные вопросы