【发布时间】:2017-05-29 11:54:13
【问题描述】:
我需要将 json 转换为 xml。
我正在使用 org.json jar 文件
但是,xml 中元素的顺序不同,并且在转换时也缺少一些元素。输入消息是一个带有 json 数组的嵌套 json 对象。 对于简单的 json 到 xml,代码可以正常工作。 请为此问题提供替代方法/库
package jjson;
import java.io.*;
import org.json.JSONObject;
import org.json.XML;
public class Json {
public static void main (String args[]) {
InputStreamReader is = null;
BufferedReader br = null;
StringBuilder sb = null;
try {
File jsonFile = new File("<<provide location of file>>");
is = new InputStreamReader(new FileInputStream(jsonFile), "UTF-8");
// Read the input stream and covert into string object
//is = new InputStreamReader(inputStream);
sb = new StringBuilder();
br = new BufferedReader(is);
String read = br.readLine();
while (read != null) {
// System.out.println(read);
sb.append(read);
read = br.readLine();
}
// Convert the String object to XML and write in the default name
String xml = XML.toString(new JSONObject(sb.toString()));
System.out.println(xml);
//String service.write(xml.getBytes(), "default");
} catch (Exception e) {
// TODO Auto-generated catch block
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
编辑:
输入消息
{
"Id": 1,
"Recipient": "xyz.ang@abcd.com",
"RequestedComments": null,
"GeneratedAutomatically": false,
"From": "Africa",
"To": "China",
"ResponsesPage": {
"Tables": [
{
"Name": null,
"Columns": [
"Question",
"Response"
],
"Rows": [
{
"Name": "1. General",
"Columns": [
{
"Key": "Question",
"Value": "1. General",
"Name": "SECTION_GENERAL",
"Type": null
},
{
"Key": "Response",
"Value": null,
"Name": null,
"Type": 5
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "1.1 Name of completing party",
"Columns": [
{
"Key": "Question",
"Value": "1.1 Name of completing party",
"Name": "COMPLETING_PARTY",
"Type": null
},
{
"Key": "Response",
"Value": "Captain",
"Name": null,
"Type": 0
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "1.2 Relationship",
"Columns": [
{
"Key": "Question",
"Value": "1.2 Relationship",
"Name": "RELATIONSHIP",
"Type": null
},
{
"Key": "Response",
"Value": "Owner",
"Name": null,
"Type": 1
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "2. Details",
"Columns": [
{
"Key": "Question",
"Value": "2. Details",
"Name": "SECTION_DETAILS",
"Type": null
},
{
"Key": "Response",
"Value": null,
"Name": null,
"Type": 5
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "2.1 FlatNumber",
"Columns": [
{
"Key": "Question",
"Value": "2.1 IMO Number",
"Name": "IMP_NUMBER",
"Type": null
},
{
"Key": "Response",
"Value": "9336012",
"Name": null,
"Type": 2
}
],
"Status": 0,
"ValidationMessage": null
}
]
},
{
"Name": "IDENTIFIER_GRID",
"Columns": [
"Question",
"Data",
"Correction if required"
],
"Rows": [
{
"Name": "2.2 Name",
"Columns": [
{
"Key": "Question",
"Value": "2.2 Name",
"Name": "TEXT_QUESTION",
"Type": null
},
{
"Key": "Data",
"Value": "IVS CABERNET",
"Name": null,
"Type": 0
},
{
"Key": "2.2 Name",
"Value": "",
"Name": null,
"Type": null
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "2.3",
"Columns": [
{
"Key": "Question",
"Value": "2.3",
"Name": "TEXT_QUESTION",
"Type": null
},
{
"Key": "Data",
"Value": "565598000",
"Name": null,
"Type": 0
},
{
"Key": "2.3 Maritime Mobile",
"Value": "",
"Name": null,
"Type": null
}
],
"Status": 0,
"ValidationMessage": null
},
{
"Name": "2.4 Build Date",
"Columns": [
{
"Key": "Question",
"Value": "2.4 Build Date",
"Name": "TEXT_QUESTION",
"Type": null
},
{
"Key": "RightShip Data",
"Value": "01 Oct 2007",
"Name": null,
"Type": 0
},
{
"Key": "2.4 Build Date",
"Value": "04 Oct. 2007",
"Name": null,
"Type": null
}
],
"Status": 0,
"ValidationMessage": null
}
]
},
{
"Name": null,
"Columns": [
"Question",
"Response"
],
"Rows": [
{
"Name": "2.5 Vessel Type ",
"Columns": [
{
"Key": "Question",
"Value": "2.5 Vessel Type ",
"Name": "SHIP_TYPE",
"Type": null
},
{
"Key": "Response",
"Value": "Bulk Carrier",
"Name": null,
"Type": 1
}
],
"Status": 0,
"ValidationMessage": null
}
]
},
{
"Name": "VESSEL_DETAILS_GRID",
"Columns": [
"Question",
"Data",
"Correction if required"
],
"Rows": [
{
"Name": "10. Attachments",
"Columns": [
{
"Key": "Question",
"Value": "10. Attachments",
"Name": "SECTION_ATTACHMENTS",
"Type": null
},
{
"Key": "Response",
"Value": null,
"Name": null,
"Type": 5
}
],
"Status": 0,
"ValidationMessage": null
}
]
}
]
},
"QuestionsCount": 147,
"RulesCount": 5,
"PassedCount": 5,
"RequiredCount": 0,
"FCount": 0,
"VId": 190980,
"AId": null,
"AssignedTo": null,
"AssignedToName": null,
"AssignedToCustomer": null,
"AssignedOn": null,
"DecidedBy": "ABC",
"DecidedByName": "Red",
"DecidedByCustomerCode": "CSMC",
"DecidedByCustomerName": "CSG",
"DecidedOn": "2017-05-02T15:14:18.893Z",
"DecidedComments": "Acceptable",
"DecidedAutomatically": false,
"Vessel": {
"Id": 190980,
"IMP": 1234,
"PrId": "12345",
"Name": "IVS CABERNET",
"Ttatus": "In Service/Commission",
"VesselType": "Bulk Carrier",
"DWT": 177173,
"Age": 9.5,
"ActivityConfigList": null,
"Links": []
},
"Attachments": [],
"History": null,
"Comments": null,
"Reports": [],
"Links": []
}
预期的输出 XML:(对于添加 JSON 作为根元素的示例)
<JSON>
<Id>1</Id>
<Recipient>xyz.ang@abcd.com</Recipient>
<RequestedComments/>
<GeneratedAutomatically>false</GeneratedAutomatically>
<From>Africa</From>
<To>China</To>
<ResponsesPage>
<Tables>
<Name/>
<Columns>Question</Columns>
<Columns>Response</Columns>
<Rows>
<Name>1. General</Name>
<Columns>
<Key>Question</Key>
<Value>1. General</Value>
<Name>SECTION_GENERAL</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value/>
<Name/>
<Type>5</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>1.1 Name of completing party</Name>
<Columns>
<Key>Question</Key>
<Value>1.1 Name of completing party</Value>
<Name>COMPLETING_PARTY</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value>Captain</Value>
<Name/>
<Type>0</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>1.2 Relationship</Name>
<Columns>
<Key>Question</Key>
<Value>1.2 Relationship</Value>
<Name>RELATIONSHIP</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value>Owner</Value>
<Name/>
<Type>1</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>2. Details</Name>
<Columns>
<Key>Question</Key>
<Value>2. Details</Value>
<Name>SECTION_DETAILS</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value/>
<Name/>
<Type>5</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>2.1 FlatNumber</Name>
<Columns>
<Key>Question</Key>
<Value>2.1 IMO Number</Value>
<Name>IMP_NUMBER</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value>9336012</Value>
<Name/>
<Type>2</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
</Tables>
<Tables>
<Name>IDENTIFIER_GRID</Name>
<Columns>Question</Columns>
<Columns>Data</Columns>
<Columns>Correction if required</Columns>
<Rows>
<Name>2.2 Name</Name>
<Columns>
<Key>Question</Key>
<Value>2.2 Name</Value>
<Name>TEXT_QUESTION</Name>
<Type/>
</Columns>
<Columns>
<Key>Data</Key>
<Value>IVS CABERNET</Value>
<Name/>
<Type>0</Type>
</Columns>
<Columns>
<Key>2.2 Name</Key>
<Value/>
<Name/>
<Type/>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>2.3</Name>
<Columns>
<Key>Question</Key>
<Value>2.3</Value>
<Name>TEXT_QUESTION</Name>
<Type/>
</Columns>
<Columns>
<Key>Data</Key>
<Value>565598000</Value>
<Name/>
<Type>0</Type>
</Columns>
<Columns>
<Key>2.3 Maritime Mobile</Key>
<Value/>
<Name/>
<Type/>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
<Rows>
<Name>2.4 Build Date</Name>
<Columns>
<Key>Question</Key>
<Value>2.4 Build Date</Value>
<Name>TEXT_QUESTION</Name>
<Type/>
</Columns>
<Columns>
<Key>RightShip Data</Key>
<Value>01 Oct 2007</Value>
<Name/>
<Type>0</Type>
</Columns>
<Columns>
<Key>2.4 Build Date</Key>
<Value>04 Oct. 2007</Value>
<Name/>
<Type/>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
</Tables>
<Tables>
<Name/>
<Columns>Question</Columns>
<Columns>Response</Columns>
<Rows>
<Name>2.5 Vessel Type </Name>
<Columns>
<Key>Question</Key>
<Value>2.5 Vessel Type </Value>
<Name>SHIP_TYPE</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value>Bulk Carrier</Value>
<Name/>
<Type>1</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
</Tables>
<Tables>
<Name>VESSEL_DETAILS_GRID</Name>
<Columns>Question</Columns>
<Columns>RightShip Data</Columns>
<Columns>Correction if required</Columns>
<Rows>
<Name>10. Attachments</Name>
<Columns>
<Key>Question</Key>
<Value>10. Attachments</Value>
<Name>SECTION_ATTACHMENTS</Name>
<Type/>
</Columns>
<Columns>
<Key>Response</Key>
<Value/>
<Name/>
<Type>5</Type>
</Columns>
<Status>0</Status>
<ValidationMessage/>
</Rows>
</Tables>
</ResponsesPage>
<QuestionsCount>147</QuestionsCount>
<RulesCount>5</RulesCount>
<PassedCount>5</PassedCount>
<RequiredCount>0</RequiredCount>
<FCount>0</FCount>
<VId>190980</VId>
<AId/>
<AssignedTo/>
<AssignedToName/>
<AssignedToCustomer/>
<AssignedOn/>
<DecidedBy>ABC</DecidedBy>
<DecidedByName>Red</DecidedByName>
<DecidedByCustomerCode>CSMC</DecidedByCustomerCode>
<DecidedByCustomerName>CSG</DecidedByCustomerName>
<DecidedOn>2017-05-02T15:14:18.893Z</DecidedOn>
<DecidedComments>Acceptable</DecidedComments>
<DecidedAutomatically>false</DecidedAutomatically>
<Vessel>
<Id>190980</Id>
<IMP>1234</IMP>
<PrId>12345</PrId>
<Name>IVS CABERNET</Name>
<Ttatus>In Service/Commission</Ttatus>
<VesselType>Bulk Carrier</VesselType>
<DWT>177173</DWT>
<Age>9.5</Age>
<ActivityConfigList/>
<Links/>
</Vessel>
<Attachments/>
<History/>
<Comments/>
<Reports/>
<Links/>
</JSON>
谢谢, 克里什
【问题讨论】:
-
请告诉我们输入 JSON 的样子、您希望目标 XML 的样子以及您当前的方法生成的内容。告诉我们“这行不通,您能提出其他建议吗”并不能充分说明您的要求。
-
嗨,我已经添加了目标xml,并输入了json。它们最初很大,因此我没有将它们添加到帖子中。我现在通过编辑消息的内容添加了它们。我当前的输出缺少一些标签,并且有些标签的顺序不正确。
-
在 JSON“对象”中,条目的顺序通常不被认为是重要的(在许多语言中,它会显示为映射、散列或字典,本质上是无序的)。因此,保留订单的要求可能很难满足。