1

我正在将 ActiveJDBC 用于宠物项目。我似乎找不到将 JSON 数组转换为 List 或 Java 数组的方法。下面的代码确实采用 JSON 数组并创建一个列表,但未填充模型。意思number.get("winning_numbers")是,null当我期望它保持一个值时。

由于没有错误,我找不到填充该模型的方法,最终目标是将其保存到数据库中。有任何想法吗?

我确实知道 ActiveJDBC 需要检测,并且我已经确保会发生这种情况,因此我怀疑这就是问题所在。

# schema
create table draws (
  draw_date TIMESTAMP not null,
  winning_numbers varchar(20) not null,
  multiplier int not null,
  primary key (draw_date)
)

违规行位于第二个缩进的 if 语句中。这仍然是原型代码,所以很抱歉,因为我还没有格式化它来美化代码。

# where the problem resides
public class PowerballLotteryService {
    private static final Logger log = LoggerFactory.getLogger(PowerballLotteryService.class);
    private static String LOTTO_URL = "http://data.ny.gov/resource/d6yy-54nr.json";

    public static List<LottoNumbers> getLatest() {
        List<LottoNumbers> latestNumbers = Lists.newArrayList();

        // rest client
        String result = null;
        List<Draw> numbersList = null;

        try {
            Client client = Client.create();
            WebResource webResource2 = client.resource(LOTTO_URL);
            ClientResponse response2 = webResource2.accept("application/json").get(ClientResponse.class);
            if (response2.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response2.getStatus());
            }

            result = response2.getEntity(String.class);

            if (result != null) {
                Gson gson = new GsonBuilder().create();
                numbersList = new Gson().fromJson(result, new TypeToken<List<Draw>>(){}.getType());

                if (numbersList != null) {
                    for(Draw number : numbersList) {
                        // This is always null for some reason: number.get("winning_numbers")
                        String winningNumber = number.get("winning_numbers").toString();
                        if (winningNumber != null) {
                            number.saveIt();
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return latestNumbers;
    }
}

编辑模型 - 就像 ActiveJDBC 文档中的示例一样简单

public class Draw extends Model {
}
4

1 回答 1

0

您的模型没有属性方法,因此 Gson 没有设置任何值(我假设它使用标准 JavaBeans 属性名称约定)。像这样的东西应该工作:

public class Draw extends Model {
   public void setWinningNumbers(String n){ set("winning_numbers", n);}
}

由于 Gson 的工作方式,您可能想尝试使用方法名称:set_winning_numberssetWinning_NumberssetWinning_numbers- 我不确定。但是,目前您没有 Gson 匹配的方法。

替代解决方案:将数据放入地图:

List<Map> numbersList = new Gson().fromJson(result, new TypeToken<List<Map>>(){}.getType());

在那之后:

List<Draw> draws = new ArrayList<>();
for(Map m: numbersList){
    Draw d = new Draw();
    d.fromMap(m);
    draws.add(d);
}
于 2016-04-05T18:23:36.307 回答