Java 将JSON转换为XML会生成无效的XML
请看以下内容Java 将JSON转换为XML会生成无效的XML,java,xml,json,eclipse,io,Java,Xml,Json,Eclipse,Io,请看以下内容 import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONML; import org.json.JSO
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONML;
import org.json.JSONTokener;
import org.json.XML;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
public class JsonToXML
{
private AmazonS3Client s3;
public JsonToXML(String inputBucket, String inputFile) throws IOException, JSONException
{
//Connection to S3
s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
Region usWest2 = Region.getRegion(Regions.US_EAST_1);
s3.setRegion(usWest2);
//Downloading the Object
System.out.println("Downloading Object");
S3Object s3Object = s3.getObject(new GetObjectRequest(inputBucket, inputFile));
System.out.println("Content-Type: " + s3Object.getObjectMetadata().getContentType());
//Read the JSON File
BufferedReader reader = new BufferedReader(new InputStreamReader(s3Object.getObjectContent()));
StringBuffer strBuffer = new StringBuffer("");
int i=0;
while (true) {
String line = reader.readLine();
if (line == null) break;
System.out.println("Running: "+i);
strBuffer.append(line);
i++;
}
JSONTokener jTokener = new JSONTokener(strBuffer.toString());
JSONArray jsonArray = new JSONArray(jTokener);
//Convert to XML
String xml = XML.toString(jsonArray);
File f = new File("XML.xml");
FileWriter fw = new FileWriter(f);
fw.write(xml);
}
}
这就是Json文件的外观
[
{
"_type": "ArticleItem",
"body": "Who's signing",
"source": "money.cnn.com",
"last_crawl_date": "2014-01-14",
"url": "http: //money.cnn.com/"
},
{
"_type": "ArticleItem",
"body": "GMreveals",
"title": "GMreveals625-horsepowerCorvetteZ06-Jan.13",
"source": "money.cnn.com",
"last_crawl_date": "2014-01-14",
"url": "http: //money.cnn.com"
}
]
此代码生成了无效的XML或没有任何文本的文件。无效意味着,在最后一次
之后,它仍然生成一些文本,因此整个文件无效。这里怎么了
更新
根据jtahlborn的答案,我成功地生成了一个具有以下输出的XML文件
<array><body>Who's signing</body><_type>ArticleItem</_type><source>money.cnn.com</source><last_crawl_date>2014-01-14</last_crawl_date><url>http: //money.cnn.com/</url></array><array><body>GMreveals</body><_type>ArticleItem</_type><title>GMreveals625-horsepowerCorvetteZ06-Jan.13</title><source>money.cnn.com</source><last_crawl_date>2014-01-14</last_crawl_date><url>http: //money.cnn.com</url></array>
您需要flush()
/close()
FileWriter以确保所有数据都写入文件
问题是xml结果中有2个“顶级”元素(2个“数组”元素)。xml只能有一个顶级元素
更新:
尝试将json转换为xml:
String xml = XML.toString(jsonArray, "doc");
您试图转换为XML的JSON结构看起来如何?你总是遇到同样的错误吗?@PärSvanström:请查看编辑。是,始终生成错误。显示生成的错误xml@jtahlborn:您好,请查看生成的XML。您好,非常感谢您的回复。我做了一个更新。请看一下。你好,我只有一个数组。这是一个大的Json数组。这意味着这个Json无法转换?@gloryofsucces-看起来您的Json和xml不匹配。json显示了一个包含多个对象的数组,但xml似乎将每个对象分解为一个单独的数组。您确定您发布的代码、json和xml是正确的吗?还有其他方法吗?@gloryofsucces-更改后的xml输出是什么?
String xml = XML.toString(jsonArray, "doc");