数组gson[java]中的混合类型



我想解析以下json。除了args部分外,其他一切都能找到。gson看起来像:my.json

{
"daily":[
    {
    "type":"anystring",
    "set":[0,0,"anystring"],
    "args":[[0,1,"String"],[1,1,"String"]]
    },
    {
    "type":"anystring",
    "set":[0,0,"anystring"],
    "args":[[0,0,"anystring"],1,2,3]
    }
]}

我的代码看起来像:

public class ReadJSON {
    public static void main (String args[]) throws FileNotFoundException{
        Gson gson = new Gson();
        Daily data = gson.fromJson(new BufferedReader(new FileReader("my.json")), new TypeToken<Daily>() {}.getType());
        System.out.println(data);
    }
}

public class Daily {
    public List<DailyRule> daily;
    public List <DailyRule>getDaily(){
        return daily;
    }
    @Override
    public String toString() {
        return daily.toString();
    }
}

public class DailyRule {
    public String type;
    public List<String> set = new ArrayList<String>();
    public List<String[]> args;
    public String getType(){
        return type;
    }
    public String getOp(){
        return op;
    }
    public String getCond(){
        return cond;
    }
    public List<String> getSet(){
        return set;
    }
    public List<String[]> getArgs() {
        return args;
    }
    @Override
    public String toString() {
       return type+" "+set.toString()+" "+args.toString();
    }
}

它给我带来了一个错误,比如Expected BEGIN_ARRAY,但第行是NUMBER。。。我理解为什么会出现错误,但不知道如何修复。我无法更改json文件(这可能是最简单的解决方案)。有没有比使用序列化程序更简单的解决方案?我将如何实施它?我讨厌做一个傻瓜:/提前感谢

您的代码中存在多个错误。第一个

1) cond和op未在DailyRule类中声明。

String op;
String cond;

2) 由于您有时插入数组,其他时间整数到参数,它必须是参数列表必须是可以支持任何数据类型的类型。所以

public List<Object> args;

所以你的日常路线课一定是这样的。

import java.util.ArrayList;
import java.util.List;
public class DailyRule {
public String type;
public List<String> set = new ArrayList<String>();
public List<Object> args;
String op;
String cond;
public String getType(){
    return type;
}
public String getOp(){
    return op;
}
public String getCond(){
    return cond;
}
public List<String> getSet(){
    return set;
}
public List<Object> getArgs() {
    return args;
}
@Override
public String toString() {
   return type+" "+set.toString()+" "+args.toString();
}
}

最新更新