【问题标题】:Mixed types in an Array gson [java]数组 gson 中的混合类型 [java]
【发布时间】:2015-12-05 11:10:07
【问题描述】:

我想解析下面的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 文件(这可能是最简单的解决方案)。有没有比使用序列化程序更简单的解决方案?我将如何实施它?我讨厌成为菜鸟:/提前谢谢

【问题讨论】:

  • [[0,1,"String"],[1,1,"String"], 是错字还是您的 JSON 格式错误?
  • 您的 json 格式错误...使用 jsonlint.com 验证您的 json

标签: java arrays json object gson


【解决方案1】:

您的代码中存在多个错误。首先

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

String op;
String cond;

2) 当您有时将 Array 插入到 args 时,其他时间 integer 必须是 List 的 args 必须是可以支持任何数据类型的类型。 所以

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();
}
}

【讨论】:

  • 公开列表 args;就是这样!谢谢老哥
猜你喜欢
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2021-12-15
  • 2018-05-12
  • 2014-09-10
  • 1970-01-01
  • 2022-08-23
相关资源
最近更新 更多