将JSON转换为XML生成的无效XML

问题描述:

请看下面的内容。将JSON转换为XML生成的无效XML

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或文件没有任何文字。无效的手段,在最后的<>之后仍然会生成一些文本,所以整个文件无效。这里有什么问题?

UPDATE

根据jtahlborn的答案,我设法生成以下输出的XML文件。

<array><body>Who&apos;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> 

但XML验证在here说:

XML Parsing Error: junk after document element 
Location: http://www.w3schools.com/xml/xml_validator.asp 
Line Number 1, Column 181: 
+0

怎样的JSON结构看起来像你想转换成XML?你总是得到同样的错误? –

+0

@PärSvanström:请参阅编辑。是的,错误总是生成。 –

+0

显示生成的xml – jtahlborn

您需要flush()/close()FileWriter,以确保所有的数据被写入到文件中。

问题是,您的XML结果中有2个“顶级”元素(2个“数组”元素)。 xml只能有一个顶级元素。

UPDATE:

试试这个为JSON转换成XML:

String xml = XML.toString(jsonArray, "doc"); 
+0

嗨,非常感谢您的回复。我做了一个更新。请看一看。 –

+0

你好,我只有一个数组。它是一个大Json数组。那么这意味着这个Json不能被转换? –

+0

@GloryOfSuccess - 它看起来像你的json和xml不匹配。你的json显示一个包含多个对象的单个数组,但是你的xml似乎将每个对象分解成一个单独的数组。你确定你发布的代码,json和xml是正确的吗? – jtahlborn