Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 xstream可以反序列化复杂数组吗?_Java_Arrays_Json_Xstream - Fatal编程技术网

Java xstream可以反序列化复杂数组吗?

Java xstream可以反序列化复杂数组吗?,java,arrays,json,xstream,Java,Arrays,Json,Xstream,这些天我学习xstream 但我发现xstream json教程在其主页中非常简单。 我有一个数组,如下所示: { "mails":[ { "uid":"ZC2027-mXOmcAtkfiztS0sEeJlkU25", "relatedCardNums":"8299,0000,1531|8299,0000,1531", "houseHol

这些天我学习xstream

但我发现xstream json教程在其主页中非常简单。 我有一个数组,如下所示:

{
    "mails":[
                {
                    "uid":"ZC2027-mXOmcAtkfiztS0sEeJlkU25",
                    "relatedCardNums":"8299,0000,1531|8299,0000,1531",
                    "houseHolder":"",
                    "subject":"no-subject",
                    "receiveTime":"2012-05-27 00:00:00",
                    "bankName":"上海银行",
                    "cards":[]
                }
        ],
    "dealedNum":330,
    "nextRequestDelay":"1",
    "percent":"0",
    "filterNum":410,
    "resCode":"01",
    "dealedBillNum":43,
    "resMsg":"正在解析"
}
我想将这个json字符串转换为GetMailsDataResponseTo,但我不知道怎么做? 你能帮我吗

package com.fund.etrading.ebankapp.base.credit.cardniu.ecardniu.dto;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fund.etrading.ebankapp.base.credit.utils.FileUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class GetMailsDataResponseDto extends ResponseBaseDto{
    protected int dealedNum;
    protected String nextRequestDelay;
    protected String percent;
    protected int filterNum;
    protected int dealedBillNum;

    protected List mails = new ArrayList();

    public List getMails() {
        return mails;
    }

    public int getDealedNum() {
        return dealedNum;
    }

    public String getNextRequestDelay() {
        return nextRequestDelay;
    }

    public String getPercent() {
        return percent;
    }

    public int getFilterNum() {
        return filterNum;
    }

    public int getDealedBillNum() {
        return dealedBillNum;
    }

    public void fromJson(String json){
        try {
            json = FileUtils.get_content("C:\\Documents and Settings\\Administrator\\workspace\\99fund_java\\src\\com\\fund\\etrading\\ebankapp\\base\\credit\\新建 文本文档 (2).txt");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        json = "{\"root\":" + json + "}";

        XStream xstream = new XStream(new JettisonMappedXmlDriver());
        xstream.alias("root", this.getClass());

        //xstream.addImplicitCollection(this.getClass(), "mails");
        xstream.alias("mail", MailDto.class);

        //xstream.aliasField("cards", MailDto.class, "cards");
        //xstream.aliasField("currencyData", CardDto.class, "currencyData");
        //xstream.aliasField("data", CurrencyDataDto.class, "data");

        xstream.fromXML(json, this);
    }
}



package com.fund.etrading.ebankapp.base.credit.cardniu.ecardniu.dto;

import java.util.ArrayList;
import java.util.List;

import com.fund.etrading.ebankapp.base.credit.BaseDto;

public class MailDto extends BaseDto{
    protected String uid;
    protected String relatedCardNums;
    protected String houseHolder;
    protected String subject;
    protected String receiveTime;
    protected String bankName;

    protected List cards = new ArrayList();

    public String getUid() {
        return uid;
    }

    public String getRelatedCardNums() {
        return relatedCardNums;
    }

    public String getHouseHolder() {
        return houseHolder;
    }

    public String getSubject() {
        return subject;
    }

    public String getReceiveTime() {
        return receiveTime;
    }

    public String getBankName() {
        return bankName;
    }

    public List getCards() {
        return cards;
    }
}

提前谢谢

如果您想将json字符串转换为自定义类(例如GetMailsDataResponseTo),我建议您使用Google Gson。 如果使用Gson,则不需要GetMailsDataResponseDto类中的fromJosn()方法

如果您只使用json解析,并且有java脚本的经验,我推荐使用parser(java库)

“Djson解析版本0.8a”——

j1.txt-提示:“无BOM和UTF-8”

。。。。
公共void fromJson(字符串json){
//(实数代码)——开始
//Var=Djson.parse(json);
//(真实代码)——结束
//--测试代码——启动
Var=null;
试一试{
var=Djson.parse(新文件(“d:\\j1.txt”);
}捕获(IOE异常){
e、 printStackTrace();
}
//--测试代码--结束
this.dealedNum=var.get(“dealedNum”).toInt();
this.nextRequestDelay=var.get(“nextRequestDelay”).toString();
this.percent=var.get(“percent”).toString();
this.filterNum=var.get(“filterNum”).toInt();
this.dealedBillNum=var.get(“dealedBillNum”).toInt();

对于(int i=0;i您需要创建一个对象来表示每个邮件,然后将
GetMailsDarResponsedTo
中的原始列表更改为
list mails
(根据您对邮件类的命名进行适当修改)。哎呀!我找到了一种解决此问题的方法:xstream.addImplicitCollection(this.getClass(),“mails”,MailDto.class)非常感谢。
....
   public void fromJson(String json){
        //(real-code)--start
        //Var var = Djson.parse(json);
        //(real-code)--end

        //--test-code--start
        Var var = null;
        try {
            var = Djson.parse(new File("d:\\j1.txt"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //--test-code--end

        this.dealedNum        = var.get("dealedNum").toInt();
        this.nextRequestDelay = var.get("nextRequestDelay").toString();
        this.percent          = var.get("percent").toString();
        this.filterNum        = var.get("filterNum").toInt();
        this.dealedBillNum  = var.get("dealedBillNum").toInt();

        for(int i=0; i<var.get("mails").size(); i++) {
            this.mails.add(var.get("mails").get(i).toObject()); // MAP type setting...
        }       
    }