Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSON转换为XML会生成无效的XML_Java_Xml_Json_Eclipse_Io - Fatal编程技术网

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&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>
您需要
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");